c++类中的私有成员和受保护成员有什么区别?
我从最佳实践惯例中了解到,没有在类外部调用的变量和函数应该是私有的,但看看我的MFC项目,MFC似乎更倾向于受保护。
有什么区别,我应该用哪个?
c++类中的私有成员和受保护成员有什么区别?
我从最佳实践惯例中了解到,没有在类外部调用的变量和函数应该是私有的,但看看我的MFC项目,MFC似乎更倾向于受保护。
有什么区别,我应该用哪个?
当前回答
MFC偏爱protected的原因是因为它是一个框架。您可能想要子类化MFC类,在这种情况下,需要一个受保护的接口来访问类的一般用途不可见的方法。
其他回答
Private =只能由母类(基类)访问 (只有我父母才能进我父母的卧室)
Protected =母类(基类)和她的子类可以访问 (只有父母可以进父母的卧室,但允许儿子/女儿进父母的卧室)
Public =母类(基类)、子类和其他所有人都可以访问 (只有我父母才能进我父母的卧室,但那是家庭聚会——我的家是我的家)
Private: It is an access specifier. By default the instance (member) variables or the methods of a class in c++/java are private. During inheritance, the code and the data are always inherited but is not accessible outside the class. We can declare our data members as private so that no one can make direct changes to our member variables and we can provide public getters and setters in order to change our private members. And this concept is always applied in the business rule. Protected: It is also an access specifier. In C++, the protected members are accessible within the class and to the inherited class but not outside the class. In Java, the protected members are accessible within the class, to the inherited class as well as to all the classes within the same package.
成员数据首选Private。c++类中的成员默认是私有的。
Public是成员函数的首选,尽管这是一个意见问题。至少有一些方法必须是可访问的。公共是对所有人开放的。这是最灵活的选择,也是最不安全的选择。任何人都可以使用它们,任何人都可以滥用它们。
Private根本无法访问。没有人可以在课堂之外使用它们,也没有人可以滥用它们。甚至在派生类中也没有。
Protected是一种折衷,因为它可以在派生类中使用。当您从类派生时,您对基类有很好的理解,并且注意不要误用这些成员。
MFC是Windows API的c++包装器,它更倾向于public和protected。由Visual Studio向导生成的类包含受保护的、公共的和私有的成员。但是MFC类本身有一些逻辑。
像SetWindowText这样的成员是公共的,因为您经常需要访问这些成员。
成员如OnLButtonDown,处理窗口接收到的通知。它们不应该被访问,因此受到保护。您仍然可以在派生类中访问它们以重写这些函数。
一些成员必须执行线程和消息循环,它们不应该被访问或覆盖,因此它们被声明为私有
在c++结构中,成员默认是公共的。结构通常只用于数据,而不是方法,因此公共声明被认为是安全的。
c++类中的私有成员和受保护成员有什么区别?
其他的回答说:
公共-所有人都可以访问。 Protected -派生类(和友类)可以访问。 私人限制。
有什么区别,我应该用哪个?
c++的核心准则给出了数据应该始终是私有的建议。我认为这是一个很好的建议,因为当你的派生类可以访问受保护的数据时,它会导致“数据面条”。保护函数更有意义,但这取决于用例。
对于函数,你有一个选择。对于数据,应该将其设置为私有,并在需要时提供受保护的访问函数。这样可以更好地控制类数据。
受保护的非静态基类成员可以被派生自该基类的任何类的成员和友元访问,方法是使用以下方法之一:
指向直接或间接派生类的指针 对直接或间接派生类的引用 直接或间接派生类的对象