- 先说不写时的默认情况,class默认为private,struct默认为public
private,public,protected的访问范围:
private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.
protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数
类的继承后方法属性变化:
使用private继承,父类的所有方法在子类中变为private;
使用protected继承,父类的protected和public方法在子类中变为protected,private方法不变;
使用public继承,父类中的方法属性不发生改变;
注:private、protected、public的优先级依次递减,继承时保留最高优先级。
代码验证:
#include<iostream>
using namespace std;
class A{
private:
void f_1(){cout << "A_private" << endl; }
protected:
void f_2(){cout << "A_protected" << endl;}
public:
void f_3(){cout << "A_public" << endl; }
};
class B : protected A{
public:
void f_4(){f_3();}
};
int main(){
B b;
b.f_3();//错误,由于B继承了protected A,因此f_3()变为了protected成员,无法被对象调用
b.f_4();//正确,protected的成员可以被子类的成员函数调用。
return 0;
}