use*_*089 1 c++ polymorphism constructor arguments
我在C++中使用多态性来创建多态的基本"家族".但是,我得到的错误,努力营造儿子嘘的时候:error C2512: 'Son' : no appropriate default constructor available和error C2660: 'Son::Son' : function does not take 2 arguments,这让我困惑,因为他们是两个部分Child类,它有两个参数
#include <iostream>
class Parent{
public:
Parent(char* name) : Name(name){};
char* Name;
void Speak(void){
std::cout << "I am a parent called " << Name << std::endl;
}
};
class Child{
public:
Child(Parent* parent, char* name) : par(parent), Name(name){};
Parent* par;
char* Name;
virtual void Speak(void){
std::cout << "I am a child, my name is " << Name << " and my parent's name is " << par->Name << std::endl;
}
};
class Son : public Child{
public:
void Speak(void){
std::cout << "I am a son, my name is " << Name << " and my parent's name is " << par->Name << std::endl;
}
};
int main(void){
Parent Dad = Parent("James");
Child Lisa = Child(&Dad, "Lisa");
Son Boo = Son(&Dad, "Boo"); // Error here
Dad.Speak();
Lisa.Speak();
Boo.Speak();
getchar();
return (0);
}
Run Code Online (Sandbox Code Playgroud)
正如编译器指出的那样,您没有为Son类提供有效的构造函数.尝试:
Son(Parent* parent, char* name) : par(parent), Name(name){};
Run Code Online (Sandbox Code Playgroud)
编辑:正如dasblinkenlight指出的那样,由于Son没有自己的任何成员来初始化,所以你应该直接引用Child Class的构造函数.
Son(Parent* parent, char* name) : Child(parent, name) {}
Run Code Online (Sandbox Code Playgroud)