C++类的成员有public、protected以及private三种属性;
C++类的对象只可以访问类的public对象;
对于protected,该属性在类的实例对象中与private表现一致,但在继承中则不同。
假设A是基类:
1、public 继承
若class B: public A{}; 则类B继承了A的所有属性和函数,但是类B只能直接访问A的public 和protected成员,A类的public和protected,在B类中不变
若class B: public A{}; 若A 中有属性a1,B中重定义了a1,则B.a1覆盖A.a1,
class C: public B{}; 时,C中的a1是B.a1;
2、protected继承
若class B: protected A{};则类B继承了A的所有属性和函数,类B只能直接访问A的public 和protected成员,但是A中的public和protected在B中均变为protected;
3、private继承
若class B: protected A{};则类B继承了A的所有属性和函数,类B只能直接访问A的public 和protected成员,但是A中的public和protected在B中均变为private;
4、多级继承,依次类推
5、在申明一个类的对象时,构造函数的调用顺序是:从基类到子类,析构函数的调用顺序是:从子类到基类;
如class B: public A{};
classC: public B{};
Cinstance;
该段程序的构造函数调用顺序:A->B->C;
析构函数调用顺序:C->B->A.
示例如下:
#include<iostream>
using namespace std;
class A{
public:
inta1;
protected:
inta2;
private:
inta3;
public:
A(){
a1= 1;
a2= 2;
a3= 3;
cout<< a3 << endl;
}
~A(){cout << "~A" << endl; };
};
class B :protected A
{
public:
inta1=45;
B(){
cout<< a1 <<" B "<< a2 << endl;
};
~B(){cout << "~B" << endl; };
};
class C :public B
{
public:
//inta1;
C(){
cout<< a1 <<" C "<< a2 << endl;
};
~C(){cout << "~C" << endl; };
};
int main()
{
Cb;
//Aa;
//cout << b << endl;
getchar();
return0;
}