访问类的私有成员

时间:2013-11-23 16:46:38

标签: c++

我有这样的类结构

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

此程序编译但在运行时返回访问冲突。我了解mynum中的class Bprivate,但即使我公开它也不行。那是为什么?

3 个答案:

答案 0 :(得分:2)

您应初始化*b并在~A()

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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