将访问的发起者分为类本身(包括成员函数、友元函数)、类的对象、派生类(包括成员函数、友元函数)、派生类的对象。
程序使用方法:放到编译器,用单一变量法跑ε=ε=ε=(~ ̄▽ ̄)~
注意:必须先理解一、再去看二三四
代码段一:还没有出现继承和派生
#include <iostream>
using namespace std;
class BaseClass
{
public:
int PublicVari;
void PublicFunc(){};
protected:
int ProtectedVari;
void ProtectedFunc(){};
private:
int PrivateVari;
void PrivateFunc(){
//1. 类本身可以访问私有成员
//私有成员可以访问,则保护、公有不用说
};
};
int main()
{
BaseClass baseClass;
//2. 类的对象不可以访问私有成员
//3. 类的对象不可以访问受保护成员
//4. 类的对象可以访问公有成员
}
代码段二:公有继承,派生类对基类成员的访问权限一览
#include <iostream>
using namespace std;
class BaseClass
{
public:
int PublicVari;
void PublicFunc(){};
protected:
int ProtectedVari;
void ProtectedFunc(){};
private:
int PrivateVari;
void PrivateFunc(){};
};
class PublicDerivedClass : public BaseClass
{
public:
void PublicDerivedFunc(){
//1.子类可以访问父类的公有成员
//2.子类可以访问父类的受保护成员(而父类自身的对象不可以)
//3.子类不可以访问父类的私有成员
// cout<<Vari<<endl;
};
};
int main()
{
PublicDerivedClass pudeClass;
//4.子类对象可以访问父类的公有成员
//5.子类对象不可以访问父类的受保护成员,则父类的私有成员不用说
}
代码段三:保护继承,派生类对基类成员的访问权限一览
#include <iostream>
using namespace std;
class BaseClass
{
public:
int PublicVari;
void PublicFunc(){};
protected:
int ProtectedVari;
void ProtectedFunc(){};
private:
int PrivateVari;
void PrivateFunc(){};
};
class PublicDerivedClass : protected BaseClass
{
public:
void PublicDerivedFunc(){
//1.子类可以访问父类的公有成员
//2.子类可以访问父类的受保护成员
//3.子类不可以访问父类的私有成员
// cout<<PrivateVari<<endl;
//以上三个和公有继承一样
};
};
int main()
{
PublicDerivedClass pudeClass;
//4.子类对象不可以访问父类的公有成员,结合ex2解释原因 (public->protected)
// pudeClass.PublicFunc();
//则父类的受保护成员和私有成员不用说
}
代码段四:私有继承,派生类对基类成员的访问权限一览
#include <iostream>
using namespace std;
class BaseClass
{
public:
int PublicVari;
void PublicFunc(){};
protected:
int ProtectedVari;
void ProtectedFunc(){};
private:
int PrivateVari;
void PrivateFunc(){};
};
class PublicDerivedClass : private BaseClass
{
public:
void PublicDerivedFunc(){
//1.子类可以访问父类的公有成员
//2.子类可以访问父类的受保护成员
//3.子类不可以访问父类的私有成员
// cout<<PrivateVari<<endl;
//以上三个和公有、受保护继承一样
};
};
int main()
{
PublicDerivedClass pudeClass;
//4.子类对象不可以访问父类的公有成员,结合ex2解释原因(public->private)
pudeClass.PublicFunc();
//则父类的受保护成员和私有成员不用说
}
一张图总结
我个人在学习时的小小方法论,也许可以辅助记忆,即从访问控制的严格程度来看,private>protected>public,如果较严的控制都满足,相对不严的一定满足;如果较松的都不满足,相对较严的一定不满足,因此只需要记忆临界点。如类的对象访问不了类中的受保护成员,则一定访问不了类的私有成员了。?
|