C ++访问说明符

时间:2011-02-07 08:59:33

标签: c++ private public access-specifier

我只是想确保我了解公共和私人权利。

关于私有访问说明符,是否意味着:

  • 仅在
  • 中访问
  • 除非有可用于访问它们的公共类方法,否则无法从类的对象访问(其他对象可以使用这些公共函数吗?
  • 没有其他对象可以访问它们

对于公众:

  • 从班级对象中获取
  • 从任何其他对象访问

是吗?

5 个答案:

答案 0 :(得分:4)

私人:只有成员函数和类的朋友才能访问它 public :可以在对象具有范围的任何地方访问。


回答问题 -

<强>私有

  1. 是。 (其他对象可以使用这些公共函数吗?没有类关系,类的一个对象无法与其他成员通信。)
  2. 朋友可以访问班级的私人会员。所以,答案取决于你的班级有没有朋友。
  3. 公开

    1. 取决于对象是否与您尝试访问的成员类具有层次关系。

答案 1 :(得分:2)

私有成员只能由同一类的成员函数和静态函数以及类的朋友访问。调用函数的对象无关紧要。案件

class Foo
{
  private:
    void bar() {}
  public:
    void baz(Foo& var)
    {
      var.bar();
    }
}

完全合法。

答案 2 :(得分:2)

我认为首先会出现词汇问题。

在C ++(和大多数语言)中,classtype。您可以将其视为实际构建内容的蓝图。

  • 描述了所持有的属性
  • 描述了对这些属性进行操作的方法
  • 它描述了适用的限制:这是“辅助功能”

通过实际实例化一个类来生成object,即构建所描述的蓝图。它或多或少是一组属性。您可以拥有同一类的多个对象,因为您可以从同一个蓝图中拥有多个房屋:请注意,由于显而易见的原因,它们的物理位置不同:)

现在,关于可访问性。有3种典型的辅助功能:publicprotectedprivate

    正如预期的那样,
  • public意味着每个人都可以访问属性或方法
  • protected有点不那么琐碎。这意味着只有对象或其子对象可以访问属性(坏主意*)或方法。 (另外,在C ++中,friend s)
  • private表示只有该类的对象(而不是他们的孩子)可以访问属性或方法(另外,在C ++中,friend s)

注意:无论访问级别如何,对象都可以不受限制地访问同一类的任何对象的所有属性和方法。

(*)即使它现在突然出现,使用protected属性通常也是一个坏主意。封装的目的是隐藏细节,不仅仅是为了它,而是因为通过精确控制谁可以访问数据,我们可以确保该类维护其不变量(简单的例子,一个在单独存储大小的数组中,您需要确保“大小”实际上始终表示数组中的项目数。 注意:当您密封层次结构时,此限制不适用,例如在C#中。

答案 3 :(得分:1)

这似乎是正确的。任何人都可以从任何地方访问标记为公共的数据成员和功能。标记为私有的数据成员和函数只能由类及其朋友访问。但是,类的成员函数可以使用任何访问说明符访问数据,因此公共函数可以读写私有数据成员(这在OOP中通用)。

答案 4 :(得分:0)

在c ++数据中,fn被封装为1个单元。 我们通过写作开始一个程序  预处理程序指令 然后,类声明 接下来是function(fn)声明,其中我们还指定了访问修饰符(public,private或protected)

&安培;最后是main()程序。

如果我们宣布一个fn 私有:类对象中的数据只能通过其中定义的fn访问 - (具有数据和私有fn的对象)

公开:任何fn

都可以访问数据

受保护:类似于private,但是也可以通过继承另一个类的属性的子类来访问数据。

示例如果A类继承自B类,则A是B的子类。