我无法理解C ++类中私有成员和受保护成员之间的区别。简单来说,有什么区别?
答案 0 :(得分:4)
protected
个成员。 private
成员不是。
一般(大多数情况下)成员应该是private
或public
。在精心设计的系统中需要protected
成员(编辑)是罕见且不寻常的。
也许我应该详细说明为什么protected
成员可以成为代码嗅觉。
如果派生类可以访问其他类没有的数据成员,那么这可能表明基础&派生类太紧密耦合了。派生类可以访问基类的状态,因此基类的状态会受到损坏。如果不是这种情况,那么通常也没有理由让数据成员public
。
其他人对此有更详细的了解。
这是Stroustrup在他的文中所说的:
宣布保护的成员是远的 比成员更容易被滥用 宣称私有。特别是, 声明受保护的数据成员是 通常是设计错误。配售 a。中的大量数据 所有派生类的公共类 使用数据打开的叶子 腐败。更糟糕的是受保护的数据, 喜欢公共数据,不能轻易做到 重组,因为没有好处 找到每一种用途的方式。从而, 受保护的数据成为软件 维修问题。
答案 1 :(得分:1)
派生类(和朋友)可以访问受保护的成员。
私人会员只能通过申报班(或朋友)访问。
简单示例:
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
};
答案 2 :(得分:1)
来自C++ FAQ: