64,282
社区成员
发帖
与我相关
我的任务
分享
class Person
{
public:
Person(string name);
void introduce();
protected:
string name;
};
class Teacher:public Person
{
public:
Teacher(string tname,string classes);
void introduce();
void teach();
protected:
string classes;
};
Person::Person(string p)
{
name=p;
}
void Person::introduce()
{
cout<<"My name is "<<name<<",Thankyou!"<<endl;
}
Teacher::Teacher(string t,string c)
{
classes=c;
}
void Teacher::teach()
{
cout<<"I teach "<<classes<<endl;
}
void Teacher::introduce()
{
cout<<"My name is "<<name<<", I teach"<<classes<<endl;
}
int main()
{
return 0;
}
error C2512: 'Person' : no appropriate default constructor available
error C2512: 'Person' : no appropriate default constructor available
error C2512: 'Teacher' : no appropriate default constructor available
#include<iostream>
#include<cstring>
using namespace std;
class Person{
public:
Person();
virtual ~Person(){};
Person(string name);
virtual void introduce();
protected:
string name;
};
class Teacher:public Person{
public:
Teacher();
virtual ~Teacher(){};
Teacher(string tname,string classes);
virtual void introduce();
void teach();
protected:
string classes;
};
Person::Person(string p){
name=p;
}
void Person::introduce(){
cout<<"my name is"<<name<<",thank you!"<<endl;
}
Teacher::Teacher(string t,string c):Person(t){
classes=c;
}
void Teacher::teach(){
cout<<"i teach"<<classes<<endl;
}
void Teacher::introduce(){
cout<<"my name is "<<name<<",i teach"<<classes<<endl;
}
int main(){
return 0;
}
重载运算符错误
还有,如果定义了一个构造函数(不是复制构造函数),该构造函数具有一个或者多个参数,那么编译器会生成复制构造函数#include <string>
#include <iostream>
using namespace std;
class Person
{
public:
Person(string name);
void introduce();
protected:
string name;
};
class Teacher:public Person
{
public:
Teacher(string tname,string classes);
void introduce();
void teach();
protected:
string classes;
};
Person::Person(string p)
{
name=p;
}
void Person::introduce()
{
cout<<"My name is "<<name<<",Thankyou!"<<endl;
}
//Teacher::Teacher(string t,string c)
Teacher::Teacher(string t,string c) : Person(t)
{
classes=c;
}
void Teacher::teach()
{
cout<<"I teach "<<classes<<endl;
}
void Teacher::introduce()
{
cout<<"My name is "<<name<<", I teach"<<classes<<endl;
}
int main()
{
return 0;
}
class Person
{
public:
Person(string name);
void introduce();
protected:
string name;
};
class Teacher:public Person
{
public:
Teacher(string tname,string classes);
void introduce();
void teach();
protected:
string classes;
};
Person::Person(string p)
{
name=p;
}
void Person::introduce()
{
cout<<"My name is "<<name<<",Thankyou!"<<endl;
}
Teacher::Teacher(string t,string c):Person(t)
{
classes=c;
}
void Teacher::teach()
{
cout<<"I teach "<<classes<<endl;
}
void Teacher::introduce()
{
cout<<"My name is "<<name<<", I teach"<<classes<<endl;
}
int main()
{
return 0;
}
你的类,没有提供默认的构造函数,子类对象构造时,无法构造其中的父类子对象。
解决方法是
1)提供默认的构造函数 。
1.1)直接添加一个默认的构造函数 。
1.2)带参数的构造函数提供参数的默认值。(某个构造函数全部参数都有默认值)
例如 Person(string name="");
2)子类在初始化表里,初始化父类对象。