将一个类的数据成员的值更改为另一类

时间:2019-06-18 14:06:21

标签: c++ oop

    #include <iostream>
    using namespace std;

    class B{
    public:
        int x;
        void setx(int a){
            x =a;
            cout<<"Inside set "<<x<<endl;
        }
        void show();
    };

    void B::show(){
        cout<<"inside show "<<x<<endl;
    }

    class A{
    public:
        void func();
        void func2();
        B bb;
    };
    void A::func(){
        bb.setx(100);
        bb.show();
    }
    void A::func2(){
        bb.show();
    }
    int main()
    {
       A a;
       B b;
       a.func(); 
       b.show(); 
       a.func2(); 
       return 0;
    }

更改仅适用于A类,而B类中的实际值未更改。我尝试了静态操作,但显示错误。

我得到的输出: 内套100 内展100 内部显示0 内部显示100

我想要的输出: 内套100 内展100 内展100 内部显示100

2 个答案:

答案 0 :(得分:0)

一个类不是一个对象。这是用户定义的数据类型,可以通过创建该类的实例来访问和使用。该类的实例是一个对象。

现在,在您的main函数中,当您通过编写A实例化类A a;的对象时,class A的构造函数实例化数据成员{{1} }(类型为bb)。然后,通过编写BB函数中创建另一个main类型的对象。类B b;的实例化与B中的数据成员bb没有关系。要获得所需的输出,您将需要class A

要清楚:

a.bb.show()

我有3架飞机,每架飞机都是struct Airplane {}; Airplane a1, a2, a3; 的一个实例,类型为class Airplane的3个对象。更改Airplane并不意味着更改a1a2

答案 1 :(得分:0)

尝试:

int main()
{
   A a;
   B b;
   a.func(); 
   a.bb.show(); 
   a.func2(); 
   return 0;
}

您在错误的对象上调用show()。由于a有自己的bb,因此您需要使用a.bb来查看更改。 b中的main是不同的对象(即使是同一类)。