C++多态性错误

use*_*089 1 c++ polymorphism constructor arguments

我在C++中使用多态性来创建多态的基本"家族".但是,我得到的错误,努力营造儿子嘘的时候:error C2512: 'Son' : no appropriate default constructor availableerror 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)

Abh*_*sal 5

正如编译器指出的那样,您没有为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)