1

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

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

  • 只能在类内部访问
  • 不能从类的对象访问,除非有可以用来访问它们的公共类方法(其他对象可以使用那些公共函数吗?
  • 没有其他对象可以访问它们

对于公众:

  • 从类的对象访问
  • 从任何其他对象访问

是对的吗?

4

5 回答 5

4

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


回答问题——

私人

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

公开

  1. 是的
  2. 取决于对象是否与您尝试访问的成员类具有层次关系。
于 2011-02-07T09:03:00.477 回答
2

私有成员只能被同一个类的成员函数和静态函数以及类的朋友访问。在哪个对象上调用该函数并不重要。所以这个案子

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

是完全合法的。

于 2011-02-07T09:13:24.180 回答
2

我认为首先是词汇问题。

在 C++(和大多数语言)中,aclasstype. 您可以将其视为实际构建某些东西的蓝图。

  • 它描述了持有的属性
  • 它描述了对这些属性进行操作的方法
  • 它描述了适用的限制:这是“可访问性”

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

现在,关于可访问性。有 3 个典型的可访问性级别publicprotectedprivate

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

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

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

于 2011-02-07T10:38:32.020 回答
1

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

于 2011-02-07T09:02:25.353 回答
0

在 c++ 中,数据和 fn 被封装为 1 个单元。我们通过编写预处理器指令开始一个程序然后,类声明,然后是函数(fn)声明,我们还指定访问修饰符(公共、私有或受保护)

& 最后是 main () 程序。

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

Public:任何fn都可以访问数据

受保护:类似于私有,但是数据也可以被继承另一个类的属性的子类访问。

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

于 2016-08-25T06:51:42.327 回答