从另一个类设置类的值

时间:2016-02-08 20:13:25

标签: c++

我正在尝试使用此代码段从另一个类设置类成员的值。以下是我正在努力完成工作的代码示例

class A
{
private:
int a;
public:
A()
{
    a = 0;
}
A(int val)
{
    a = val;
}
int GetA()
{
    return  a;
}

void SetA()
{
    a = 290;
}
};


class B
{

B(){};

 void SetB()
{
     A a;
     a.SetA();
}

};


int main(){
A a;
B b;
b.SetB();
cout << b.GetA();

}

如何使这段代码变成290。我目前打印出0

3 个答案:

答案 0 :(得分:0)

SetB中,A变量是一个在函数返回时被销毁的临时变量。

答案 1 :(得分:0)

在代码段中编写代码的方式,代码无法编译,因为B没有方法GetA()。根据您的使用案例(main()中的代码),我怀疑您 希望B继承A

class B : public A
{
public:
  B() {];
  void SetB()
  {
    SetA();
  }
};

虽然这没有多大意义,因为在这种情况下你可以直接调用b.SetA(),您希望A类型的对象作为B成员

class B
{
public:
  void SetB()
  {
    a.SetA();
  }
  int GetA()
  {
    return a.GetA();
  }
private:
  A a;
};

但是从你的片段中说出你实际想要实现的目标有点难以理解。

此外,您可能希望Get…()方法为const

答案 2 :(得分:0)

如果你;想要实现我认为你想要实现的目标,那么你几乎就在那里,只是你创建了两个版本的A,一个在主堆栈上,一个这是B :: SetA()

中的临时内容

尝试将A作为参考参数传递给B,这样只有一个版本的A。

void SetB(A& a)
{
     a.SetA();
} 

然后您的调用代码将是:

A a;
B b;
b.SetB(a);
cout << a.GetA();

或者,在B的构造函数中传递a并将A存储为B;

中的引用成员