继承类不能继承基类的构造函数和析构函数,如果派生类需要的话,我们需要为派生类全新定义构造函数和析构函数。
一、单继承的构造函数
class Person { protected: char name[10]; char sex; public: //The Constructor of the base class Person(char name[],char sex):sex(sex) { cout<<"Base class constructor!"<<endl; strcpy(this->name,name); } }; class Student::public Person { private: int number; public: //Constructor of the derived class Student(int number,char name[],char sex):Person(name,sex) { cout<<"Derived class constructor!"<<endl; this->number = number; } };
这个部分的干货:
1. 继承类的构造函数只能初始化它自己新定义的数据,不能初始化从基类继承过来的东西,因此需要在定义继承类的构造函数时调用基类的构造函数,就像这样:
Student(int number,char name[],char sex):Person(name,sex){...}
2. 定义派生类对象时,会首先运行派生类的构造函数,但是其构造函数会链接到基类的构造函数,所以实际上首先运行的是基类的构造函数。
3. 如果继承类的构造函数中不写基类的构造函数,编译会出错,因为编译器会默认链接到默认基类构造函数,然而这个函数不存在。
4. 执行顺序与写的顺序无关,总会先执行基类的构造函数。
时间: 2024-10-23 23:40:52