#include<iostream>
using namespace std;
class A //A是父类
{
private:
int a; //private 成员
public:
A() {}
A(int x):a(x) {} //带 参数的构造函数对a 初始化
void printA()
{
cout<<"a =" <<a<<endl;
}
};
class B: public A //B 是子类
{
private :
int b;
public:
B(int x,int y) :A(x) //需要初始化b以及父类的a
{
//a=x; //a为 private,无法在子类中被访问,编译错误
//A(x); //调用方式错误,编译错误
b=y;
}
void printB()//
{
cout<<"b =" << b <<endl;
}
};
int main()
{
B b(2,3);
b.printA();
b.printB();
return 0;
}
/*
如果在子类的构造函数中需要初始化父类的private成员
直接对其赋值是不行的(23行) 只有调用父类的构造函数才能完成对它的初始化。
但是在函数体内调用父类的构造函数也是不合法的(24行)
只有采取21行的初始化列表调用子类构造函数的方式
程序执行结果:
a = 2
b = 3
*/
初始化列表调用子类构造函数
最新推荐文章于 2024-07-18 08:25:11 发布