private和protected成员:C ++private和protected成员:C ++(P

2019-05-09 02:02发布

有人可以告诉我,以之间的区别privateprotected的类成员?

我从最佳实践惯例,以变量和函数未调用类外,应作出理解private -但是看着我的MFC项目,MFC似乎有利于protected

有什么区别和我应该使用?

Answer 1:

私有成员只能在类定义它们中访问。

受保护的成员都在定义它们的类和从该类继承的类访问。

编辑:都还他们的阶级的朋友访问,并在保护成员的情况下,通过其派生类的朋友。

编辑2:使用任何有意义的你的问题的情况下。 你应该尽量让会员私人每当你可以减少耦合和保护基类的实现,但如果这是不可能的,那么使用受保护的成员。 检查C ++ FAQ为了更好地了解这一问题。 这对保护变量的问题也可能会有所帮助。



Answer 2:

A类的公共成员所有,每个人都可以访问。

A类的protected成员没有的代码外部访问,但是从A派生的任何类的代码访问

A类的私有成员都没有的代码外部访问,或从任何类的代码从A派生

所以,最后,选择保护之间的或私有的回答下列问题: 多少信任你愿意投入派生类的程序员?

默认情况下 ,假设派生类是不被信任,并让你的会员的私人 。 如果你有一个很好的理由给它的派生类的妈妈级内部的自由出入,那么你可以让他们的保护。



Answer 3:

受保护的成员可以从派生的类访问。 私立学校不能。

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

在“最佳实践”的条款,这取决于。 如果有,即使微弱的可能性,有人可能想从你现有的和需要访问内部成员派生一个新类,让他们受保护的,而不是私人。 如果它们是私有的,你的类可能难以轻易地继承。



Answer 4:

该MFC主张保护的原因,是因为它是一个框架。 你可能想继承了MFC类,并在这种情况下,需要保护的接口来访问不一般用类的可视方法。



Answer 5:

这一切都取决于你想要做什么,你想要的派生类能够看到。

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(); // wont work
        protFunc(); // will work
        publFunc(); // will return 1 since it's overridden in this class
    }
}


Answer 6:

标记为属性和方法protected是-不像私立学校-仍然在子类中可见。

除非你不希望使用或提供覆盖可能的子类方法的可能性,我想让他们private



Answer 7:

受保护的成员只能由该类的后代进行访问,并通过代码相同的模块中。 私有成员只能由他们宣布在课堂上进行访问,并通过代码相同的模块中。

当然,友元函数抛出此窗外,但哦。



Answer 8:

私有成员是从类中唯一的访问,保护成员是在类和派生类访问。 这是于二OO语言传承的功能。

你可以有私有,保护和公共继承在C ++中,这将决定什么派生类可以继承层次访问。 C#例如只有公有继承。



Answer 9:

当然看一看在受保护的成员变量的问题。 建议使用专用的默认(就像C ++ class SES做),以减少耦合。 受保护的成员变量几乎总是一个坏主意,受保护的成员函数可用于例如模板方法模式。



Answer 10:

私人 =由母舰访问(基类)止(即只有我的父母能进入我父母的卧室)

保护由母舰(基类),和她的女儿=访问(即只有我的父母能进入我的父母的卧室,但给了儿子/女儿权限走进父母的卧室)

公众通过=母舰(基类),女儿和其他人访问(即只有我的父母能进入我的父母的卧室,但它是一个家庭聚会-美卡莎苏CASA)



Answer 11:

由于不需要公共成员函数在派生类中获取和更新protected成员,这增加了代码的效率并减少了代码,我们需要编写量。 然而,派生类的程序员应该是知道的,他是做什么的。



Answer 12:

私有成员只能在其宣布为地方保护成员可以在它与由它继承的类一起宣布类访问相同的类访问。



Answer 13:

  • 私人 :这是一个访问说明符。 默认情况下,实例(部件)变量或在C ++ / Java中的类的方法是私有的。 在继承,代码和数据是始终继承,但不是在类的外部访问。 我们可以把我们的数据成员的私人声明,使任何人可以直接改变我们的成员变量,我们可以提供公共getter和setter为了改变我们的私有成员。 而这个概念在业务规则始终应用。

  • 保护 :这也是一个访问说明符。 在C ++中,受保护的成员是在类中,并继承类而不是类的外部访问。 在Java中,protected成员在类中访问,在继承的类,以及在同一个包中的所有类。



Answer 14:

private优选用于构件的数据。 成员C ++类是private默认。

public是最好的成员函数,虽然它是一个见仁见智。 至少有一些方法必须是可访问的。 public是对所有人开放。 这是最灵活的选择和最安全的。 任何人都可以使用它们,任何人都可以滥用它们。

private是无法访问的。 没有人能够使用它们的类之外,没有人可以滥用它们。 甚至在派生类。

protected是一种妥协,因为它可以在派生类中使用。 当你从一个类派生,你有基类有很好的理解,并注意不滥用这些成员。

MFC是Windows API一个C ++包装,它更publicprotected 。 由Visual Studio向导生成的类有一个丑陋的混合protectedpublicprivate成员。 但有一些逻辑来MFC类本身。

会员如SetWindowText都是public ,因为你经常需要访问这些成员。

会员如OnLButtonDown ,处理窗口收到通知。 他们不应该访问的,因此它们protected 。 您仍然可以访问他们在派生类中重写这些功能。

一些成员所要做的线程和消息循环,他们不应该访问或重写,所以它们被声明为private

在C ++中的结构,成员是public默认情况下。 结构通常用于数据而已,而不是方法,因此public声明被认为是安全的。



Answer 15:

受保护的非静态的基类成员可以通过从基类派生的任何类的成员和朋友通过使用下列中的一个进行访问:

  • 指向一个直接或间接地派生类
  • 甲参照直接或间接地派生类
  • 一个直接或间接地导出类的一个对象


Answer 16:

私人:通过类的成员函数和友元函数或朋友类访问。 对于C ++类,这是默认的访问符。

保护:通过类的成员函数,朋友功能或朋友类&派生类无障碍。

  • 你可以把类的成员变量或函数(甚至是类型定义或内部类的)为私有或保护按您的要求。
  • 大部分的时间你保持类成员作为私人和添加get / set函数封装。 这有助于维护的代码。
  • 当你要保持你的公共职能模块或消除而不是单功能编写整个代码重复的代码通常私有函数使用。 这有助于维护的代码。

请参考以下链接了解更多详情。



Answer 17:

私有和保护访问改性剂是一个和相同的只是基类的这一受保护成员可以在子基类的范围之外进行访问(派生)类。 它也适用于继承相同。 但与私营修改基类成员只能在基类的范围或代码访问和其朋友的功能只有“”“”



文章来源: Private and Protected Members : C++
标签: c++ class mfc