class Base
{
protected:
int prot;
private:
int priv;
public:
int Prot() const { return prot; }
int Priv() const { return priv; }
};
class Derived
{
public:
void ShowProt() { cout << prot; } // OK - prot is accessible because it is protected
void ShowPriv() { cout << priv; } // Compile Error - cannot access priv, which is private
void ShowPriv2() { cout << Priv(); } // OK, because Priv() is public
};
3 回答
protected
成员可以通过派生类访问 .private
成员不是 .一般(大多数时候)成员应该是
private
或public
. 在精心设计的系统中需要protected
成员(编辑)是罕见且不寻常的 .编辑:
也许我应该详细说明为什么
protected
成员可以成为代码气味 .如果派生类可以访问其他类没有的数据成员,则可能表明基类和派生类的耦合过于紧密 . 派生类可以访问基类' state, and therefore the base class'状态是否存在损坏 . 如果不是这种情况,那么通常也没有理由让数据成员
public
.其他人已经详细介绍了这一点 .
这是Stroustrup在他的文中所说的:
另见this question .
来自C++ FAQ:
在类的私有部分中声明的成员(数据成员或成员函数)只能由该类的成员函数和朋友访问
在类的受保护部分中声明的成员(数据成员或成员函数)只能由该类的成员函数和朋友以及派生类的成员函数和朋友访问
任何人都可以访问在类的公共部分中声明的成员(数据成员或成员函数)
派生类(和朋友)可以访问受保护的成员 .
私人会员只能通过申报班(或朋友)访问 .
简单的例子: