私人和受保护的会员

时间:2011-01-12 18:57:52

标签: c++ class private member protected

我无法理解C ++类中私有成员和受保护成员之间的区别。简单来说,有什么区别?

3 个答案:

答案 0 :(得分:4)

派生类可以访问

protected个成员。 private成员不是。

一般(大多数情况下)成员应该是privatepublic。在精心设计的系统中需要protected成员(编辑)是罕见且不寻常的。

编辑:

也许我应该详细说明为什么protected成员可以成为代码嗅觉。

如果派生类可以访问其他类没有的数据成员,那么这可能表明基础&派生类太紧密耦合了。派生类可以访问基类的状态,因此基类的状态会受到损坏。如果不是这种情况,那么通常也没有理由让数据成员public

其他人对此有更详细的了解。

这是Stroustrup在他的文中所说的:

  

宣布保护的成员是远的   比成员更容易被滥用   宣称私有。特别是,   声明受保护的数据成员是   通常是设计错误。配售   a。中的大量数据   所有派生类的公共类   使用数据打开的叶子   腐败。更糟糕的是受保护的数据,   喜欢公共数据,不能轻易做到   重组,因为没有好处   找到每一种用途的方式。从而,   受保护的数据成为软件   维修问题。

另见this question

答案 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

  • 在类的私有部分中声明的成员(数据成员或成员函数)只能由该类的成员函数和朋友访问
  • 在类的受保护部分中声明的成员(数据成员或成员函数)只能由该类的成员函数和朋友以及成员函数和派生类的朋友访问
  • 任何人都可以访问在类的公共部分中声明的成员(数据成员或成员函数)