Access specifier

From 金猪知识库
Jump to: navigation, search

在C++中access specifier可以用于2处,一是在定义类成员的时候,还有就是在类继承的时候

class Base
{
public:
int m_a;
protected:
int m_b;
private:
int m_c;

public:
void foo()
{
Base b;
b.m_c = 0; // notice here is OK
b.m_b = 0; // notice here is OK
b.m_a = 0;
}

};

class Public:public Base
{
public:
void foo()
{
m_a = 0;
m_b = 0;
//m_c = 0; // m_c is private in Base, so it's not visible to Public
}
};

对于类中的修饰符我们对于其含义一般都很了解。但是对于在继承时的access specifier就有时候会有些搞不清楚,原因也是因为使用的较少。
下面用一张表格来对他们进行总结:


Public inheritance
Base access specifier Derived access specifier Derived class access? Public access?
Public Public Yes Yes
Private Private No No
Protected Protected Yes No
Protected inheritance
Base access specifier Derived access specifier Derived class access? Public access?
Public Protected Yes No
Private Private No No
Protected Protected Yes No
Private inheritance
Base access specifier Derived access specifier Derived class access? Public access?
Public Private Yes No
Private Private No No
Protected Private Yes No
Personal tools