c++类中的私有成员和受保护成员有什么区别?
我从最佳实践惯例中了解到,没有在类外部调用的变量和函数应该是私有的,但看看我的MFC项目,MFC似乎更倾向于受保护。
有什么区别,我应该用哪个?
c++类中的私有成员和受保护成员有什么区别?
我从最佳实践惯例中了解到,没有在类外部调用的变量和函数应该是私有的,但看看我的MFC项目,MFC似乎更倾向于受保护。
有什么区别,我应该用哪个?
当前回答
受保护的非静态基类成员可以被派生自该基类的任何类的成员和友元访问,方法是使用以下方法之一:
指向直接或间接派生类的指针 对直接或间接派生类的引用 直接或间接派生类的对象
其他回答
受保护的非静态基类成员可以被派生自该基类的任何类的成员和友元访问,方法是使用以下方法之一:
指向直接或间接派生类的指针 对直接或间接派生类的引用 直接或间接派生类的对象
私有成员只能在定义它们的类中访问。
可在定义受保护成员的类中以及从该类继承的类中访问受保护成员。
编辑:两者都可以被其类的友元访问,如果是受保护成员,则可以被其派生类的友元访问。
编辑2:使用任何在你的问题上下文中有意义的东西。您应该尽可能地将成员设为private,以减少耦合并保护基类的实现,但如果不可能,则使用受保护的成员。查看c++常见问题以更好地理解这个问题。这个关于受保护变量的问题可能也有帮助。
可以从派生类访问受保护的成员。私立学校则不行。
class Base {
private:
int MyPrivateInt;
protected:
int MyProtectedInt;
public:
int MyPublicInt;
};
class Derived : Base
{
public:
int foo1() { return MyPrivateInt;} // Won't compile!
int foo2() { return MyProtectedInt;} // OK
int foo3() { return MyPublicInt;} // OK
};
class Unrelated
{
private:
Base B;
public:
int foo1() { return B.MyPrivateInt;} // Won't compile!
int foo2() { return B.MyProtectedInt;} // Won't compile
int foo3() { return B.MyPublicInt;} // OK
};
至于“最佳实践”,则视情况而定。如果有人想要从您现有的类中派生一个新类,并且需要访问内部成员,那么将它们设置为Protected,而不是Private。如果它们是私有的,那么您的类就很难轻易继承。
私有成员只能从类内部访问,受保护成员可以在类和派生类中访问。这是面向对象语言中继承的一个特性。
在c++中可以有私有、受保护和公共继承,这将决定哪些派生类可以在继承层次结构中访问。例如,c#只有公共继承。
与私有属性和方法不同,标记为受保护的属性和方法在子类中仍然可见。
除非您不想在可能的子类中使用或提供重写该方法的可能性,否则我会将它们设为private。