C++ access specifier
From 金猪知识库
在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就有时候会有些搞不清楚,原因也是因为使用的较少。
下面用一张表格来对他们进行总结:
| Base access specifier | Derived access specifier | Derived class access? | Public access? |
|---|---|---|---|
| Public | Public | Yes | Yes |
| Private | Private | No | No |
| Protected | Protected | Yes | No |
| Base access specifier | Derived access specifier | Derived class access? | Public access? |
|---|---|---|---|
| Public | Protected | Yes | No |
| Private | Private | No | No |
| Protected | Protected | Yes | No |
| Base access specifier | Derived access specifier | Derived class access? | Public access? |
|---|---|---|---|
| Public | Private | Yes | No |
| Private | Private | No | No |
| Protected | Private | Yes | No |