c++类中的私有成员和受保护成员有什么区别?

我从最佳实践惯例中了解到,没有在类外部调用的变量和函数应该是私有的,但看看我的MFC项目,MFC似乎更倾向于受保护。

有什么区别,我应该用哪个?


当前回答

私有访问修饰符和受保护访问修饰符是相同的,只是基类的受保护成员可以在子(派生)类的基类范围之外被访问。 它也同样适用于继承。 但是使用私有修饰符,基类的成员只能在基类的作用域或代码中访问,它的友函数只能是''''

其他回答

私有访问修饰符和受保护访问修饰符是相同的,只是基类的受保护成员可以在子(派生)类的基类范围之外被访问。 它也同样适用于继承。 但是使用私有修饰符,基类的成员只能在基类的作用域或代码中访问,它的友函数只能是''''

这完全取决于您想要做什么,以及您希望派生类能够看到什么。

class A
{
private:
    int _privInt = 0;
    int privFunc(){return 0;}
    virtual int privVirtFunc(){return 0;}
protected:
    int _protInt = 0;
    int protFunc(){return 0;}
public:
    int _publInt = 0;
    int publFunc()
    {
         return privVirtFunc();
    }
};

class B : public A
{
private:
    virtual int privVirtFunc(){return 1;}
public:
    void func()
    {
        _privInt = 1; // wont work
        _protInt = 1; // will work
        _publInt = 1; // will work
        privFunc(); // wont work
        privVirtFunc(); // will work, simply calls the derived version.
        protFunc(); // will work
        publFunc(); // will return 1 since it's overridden in this class
    }
}

Private:可由类成员函数和好友函数或好友类访问。 对于c++类,这是默认的访问说明符。

Protected:可由类成员函数、友元函数或友元类及派生类访问。

您可以根据需要将类成员变量或函数(甚至是typedefs或内部类)保留为私有或受保护。 大多数情况下,保持类成员为私有,并添加get/set函数进行封装。这有助于代码的维护。 一般来说,当你想要保持公共函数模块化或消除重复代码而不是将整个代码写入单个函数时,就会使用私有函数。这有助于代码的维护。

更多细节请参考这个链接。

当然,看看受保护的成员变量问题。建议使用private作为默认值(就像c++类一样)来减少耦合。受保护的成员变量总是一个坏主意,受保护的成员函数可以用于例如模板方法模式。

受保护的成员只能由类的后代和同一模块中的代码访问。私有成员只能被声明它们的类以及同一模块中的代码访问。

当然,朋友函数把这个扔出窗外,但是。