一:private、protected和public的访问权限问题:
private:1、类中的成员函数可以调用,2、类的友元函数可以调用,3、但是类对象无法直接调用。4、对于派生类,不管是成员函数还是派生类的对象都无法进行调用。
protected:1、类中的成员函数不可以调用,2、类的友元函数可以调用,3、类对象也无法进行调用。4、对于派生类,成员函数可以进行调用,但是派生类的对象则无法进行调用。
public:1、可以被类中的成员函数调用,2、类的友元函数可以调用,3、类对象也可以直接调用。4、对于派生类,成员函数和派生类的对象都可以进行调用。
注:友元函数包括1、设为友元的普通的非成员函数。2、设为友元的其它类的成员函数。3、设为友元类的所有成员函数。
二:关于private、protected和public的继承问题:
1、不管是private、protected还是public,子类继承了基类后,其必然继承了基类所有成员(除了基类的构造函数和析构函数),同样继承了基类空间的大小。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include<iostream> using namespace std; class A { public: A() { cout<<"这是class A."<<endl; } private: int a; int temp; }; class B : private A { public: B() { cout<<"这是class B."<<endl; } private: int b; }; void main() { cout<<sizeof(A)<<endl; cout<<sizeof(B)<<endl; }
2、类继承后,属性的变化。
private 属性可以被继承,但是被继承不管什么情况下(除了基类的公有成员函数和基类的友元函数)都不能被直接调用;
使用private继承,父类的protected和public属性在子类中变为private;
使用protected继承,父类的protected和public属性在子类中变为protected;
使用public继承,父类中的protected和public属性不发生改变;
public继承 public protected 不可用
protected继承 protected protected 不可用
private继承 private private 不可用