访问类的私有成员

Accessing private memebers of a class

本文关键字:成员 访问      更新时间:2023-10-16

我有一个类似的类结构

class B;
class A {
  private: 
      B *b;
  public:
      A(int val) {
           b->SetVal(val);
      }
};
class B {
  private:
      int mynum;
  public:
      B();
      void SetVal(int value) {
          mynum = value;
      }
};

和主要:

void main(){
  A Head(10);
}

此程序进行编译,但在运行时返回访问冲突。我知道class B中的mynumprivate,但即使我将其公开,它也不起作用。为什么?

您应该初始化*b并在~A() 中删除

class A {
  private: 
      B *b;
  public:
      A(int val) {
           b=new B();
           b->SetVal(val);
      }
      ~A()
     {
        if(b)
        {
           delete b;
           b=0;
        }
     }
};

您实际上并没有将B指针指向任何位置。因此,当您的构造函数尝试执行b->SetVal(val)时,您可能会遇到内存访问冲突,并且肯定不会得到定义良好的行为。

这与mynum是私有的这一事实无关。您始终可以从类的方法访问该类的私有成员。