【问题标题】:Set a value of a class from another class从另一个类中设置一个类的值
【发布时间】:2016-02-08 20:13:25
【问题描述】:

我正在尝试使用这个 sn-p 从另一个类中设置一个类成员的值。这是我正在尝试制作的代码示例

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

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    【讨论】:

    • 是否需要通过引用传递值?
    • 是的,您需要通过引用传递class A 的实例。
    【解决方案2】:

    它在你的 sn-p 中的写法,你的代码不会编译,因为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;
    };
    

    但是从你的 sn-p 中很难看出你真正想要达到的目标。

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

    【讨论】:

      【解决方案3】:

      如果您正在尝试实现我认为您正在尝试实现的目标,那么您就快到了,只是您正在创建 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中;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-10
        • 2022-09-29
        • 2023-02-21
        • 1970-01-01
        • 2021-08-16
        • 2010-12-04
        • 1970-01-01
        相关资源
        最近更新 更多