首页 文章

私人和受保护的会员

提问于
浏览
0

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

3 回答

  • 4

    protected 成员可以通过派生类访问 . private 成员不是 .

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

    编辑:

    也许我应该详细说明为什么 protected 成员可以成为代码气味 .

    如果派生类可以访问其他类没有的数据成员,则可能表明基类和派生类的耦合过于紧密 . 派生类可以访问基类' state, and therefore the base class'状态是否存在损坏 . 如果不是这种情况,那么通常也没有理由让数据成员 public .

    其他人已经详细介绍了这一点 .

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

    被宣布受保护的成员比被宣布私有的成员更容易被滥用 . 特别是,声明受保护的数据成员通常是设计错误 . 将大量数据放在公共类中以供所有派生类使用,使数据打开到损坏 . 更糟糕的是,受保护的数据(如公共数据)无法轻松重组,因为没有找到每种用途的好方法 . 因此,受保护的数据成为软件维护问题 .

    另见this question .

  • 1

    来自C++ FAQ

    • 在类的私有部分中声明的成员(数据成员或成员函数)只能由该类的成员函数和朋友访问

    • 在类的受保护部分中声明的成员(数据成员或成员函数)只能由该类的成员函数和朋友以及派生类的成员函数和朋友访问

    • 任何人都可以访问在类的公共部分中声明的成员(数据成员或成员函数)

  • 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
    };
    

相关问题