我正在尝试使用此代码段从另一个类设置类成员的值。以下是我正在努力完成工作的代码示例
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
答案 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;
中的引用成员