在继承中与其他成员不同,构造方法不能被子类继承。在创建子类对象时,为了初始化从父类继承来的成员,需要调用父类的构造方法。
if(子类没有自定义构造函数){
if(基类没有自定义构造函数){
用子类定义对象时,先自动调用基类的默认构造函数,再调子类的默认构造函数。
} else if(基类有自定义无参构造函数){
用子类定义对象时,先自动调用基类的自定义无参构造函数,再调子类的默认构造函数。
}else {
用子类定义对象时,编译提示没有默认构造函数可用
}
}else if(子类自定义构造函数但没有调用基类的某个构造函数){
if(基类没有自定义构造函数){
用子类定义对象时,先自动调用基类的默认构造函数,再调子类的自定义构造函数。
}else if(基类有自定义无参构造函数){
用子类定义对象时,先自动调用基类的自定义无参构造函数,再调子类的自定义构造函数。
}else {
用子类定义对象时,编译提示没有默认构造函数可用
}
}
两处else中,即基类有自定义含参构造函数,需要初始化父类成员,方式是在子类构造函数之后添加冒号,然后加上父类的含参构造函数。
#include <iostream>
using namespace std;
class Parent
{
public:
Parent(const char* s)//基类有自定义含参构造函数
{
cout<<"Parent()"<<" "<<s<<endl;
}
~Parent()
{
cout<<"~Parent()"<<endl;
}
};
class Child : public Parent
{
public:
Child() : Parent("Parameter from Child!")//子类构造函数之后添加冒号,然后加上父类的含参构造函数
{
cout<<"Child()"<<endl;
}
~Child()
{
cout<<"~Child()"<<endl;
}
};
运行结果如下:

本文是C++学习笔记,重点介绍了如何在子类中继承父类,并通过在子类构造函数中使用冒号后跟随父类的含参构造函数来初始化父类成员。

491

被折叠的 条评论
为什么被折叠?



