【问题标题】:Why can I access private data members through pointers and should I do this?为什么我可以通过指针访问私有数据成员,我应该这样做吗?
【发布时间】:2014-06-21 23:59:50
【问题描述】:

我刚刚发现我可以在 C++ 中做到这一点,它编译得很好(MinGW 和 VC++):

class A
{
private:
   void doSth();
   A* foo;
   A* bar;
};

void A::doSth()
{
  foo->bar;
}

foo 的成员字段 bar 是私有的。 为什么我可以访问它?我应该这样做吗?

【问题讨论】:

  • 请张贴其隐私证明。
  • 如果私有变量完全无法访问,那现在就不是很有用了..:)
  • 如果它是非法的,你将无法对私人会员做任何事情。
  • +1。这是一个很好的问题,因为我可以看到指针如何将正在发生的事情与可见性混淆。
  • @Ben 也许 OP 喜欢 player。有什么关系?哎呀。

标签: c++ pointers private member access-modifiers


【解决方案1】:

在 C++ 中,private 表示访问仅限于同一个类,而不是同一个对象实例。

【讨论】:

  • 谢谢,我会尽快接受。我不知道访问修饰符是基于类的。认为它们是基于实例的。
【解决方案2】:

您还会注意到,在 A 的方法中,可以访问 A 的私有变量的其他实例。喜欢

A::baz(A& other) {
    other.bar; // legal
}

可见性是在类级别,而不是实例级别。

【讨论】:

  • 为什么要添加另一个答案而不是编辑第一个答案?
  • @luk32 因为第一个是错误的,这是不同的。我没有正确理解这个问题。
  • 那么......为什么不编辑错误的呢?也许我没有看到待删除的内容。这很尴尬。
  • @djechlin 编辑您发布到正确答案的第一个答案没有帮助吗?
  • @luk32 因为我认为将一个答案变形为完全不同的答案是愚蠢的。一方面,投票变得毫无意义。也许真正喜欢我明显错误答案的人不会喜欢我的正确答案。
猜你喜欢
  • 2011-04-06
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
相关资源
最近更新 更多