思考:
如何初始化父类成员?
父类构造函数和子类构造函数有什么关系?
子类对象的构造:
子类构造函数对继承而来的成员进行初始化有两种方式:
1、直接通过初始化列表或者赋值的方式进行初始化
2、调用父类构造函数进行初始化
父类构造函数在子类中的调用方式:
显式调用只能在初始化列表进行。
如下:
示例程序:
第30行会调用子类的无参构造函数Child(),而这个构造函数会默认调用父类的无参构造函数,因为父类没有默认构造函数,因此报错。
在父类中加上无参构造函数即可:
继续完善:
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Parent 7 { 8 public: 9 Parent() 10 { 11 cout << "Parent()" << endl; 12 } 13 Parent(string s) 14 { 15 cout << "Parent(string s) : " << s << endl; 16 } 17 }; 18 19 class Child : public Parent 20 { 21 public: 22 Child() 23 { 24 cout << "Child()" << endl; 25 } 26 Child(string s) : Parent(s) 27 { 28 cout << "Child(string s) : " << s << endl; 29 } 30 }; 31 32 int main() 33 { 34 Child c; 35 Child cc("cc"); 36 37 return 0; 38 }
35行会触发26行的子类构造函数,在调用子类的构造函数前,先调用父类的Parent(string s)这个构造函数。
输出结果如下: