c++ 如何从 class 中获取变量并将其放入另一个 class 中,然后将其放入构造函数中?

c++ How do I get variables from a class and put it into another class, and put it into a constructor?

我有 2 个 h 和 cpp 文件。 我想知道如何从 Abe.h 文件或 Abe class 调用变量到 Bob.h 或 Bob class。请帮忙。

Abe.h

#include <iostream>
using namespace std;
#ifndef ABE
#define ABE

class Abe
{
    private:
    int num;

    public:
        Abe();
        Abe(int);
        void showNumber();

};
#endif // ABE

Abe.cpp

#include "Abe.h"
#include <iostream>

using namespace std;

Abe::Abe()
{
    num=45;
}

Abe::Abe(int n)
{
    num=n;
}

void Abe::showNumber()
{
    cout<<num;
}

BOB.h

#include "Abe.h"
#include <iostream>

using namespace std;
#ifndef BOB
#define BOB

class Bob
{
private:
    Abe a;

public:
    Bob(Abe);
    void showNum();
};

#endif // BOB

BOB.cpp

#include "Abe.h"
#include "Bob.h"
#include <iostream>

using namespace std;

Bob::Bob(Abe a1)
{
    a=a1;
  //^not sure what a=a1 is doing but if you could explain in simple terms or in deatil that would help.
}

void Bob::showNum()
{
    //how do I display it here??
}

那么如何从 Abe class 获得 "num" 并在 Bob class 中使用它? 请帮忙。谢谢!

Bob构造函数中的赋值就像任何其他赋值一样,它a1中的数据复制到a中就像例如此代码将:

int a1 = 6;

...

int a;
a = a1;

一旦在 Bob class 中初始化了 a 对象,就可以像调用任何其他对象一样调用 a 的成员函数。但是,您不能访问私有成员。

一个解决办法是在Abeclass中增加一个getter成员函数returns num 成员,例如

int Abe::getNumber() const
{
    return num;
};

然后就可以在Bobclass中使用了

std::cout << "the number is " << a.getNumber() << '\n';

a=a1 将传递给 Bob 的构造函数的 Abe 分配给 Boba 成员。使用更具描述性的变量名可能是个好主意,并且使用初始化列表可以获得一些优化。示例:

Bob::Bob(Abe a1):a(a1)
{
}

现在 Bob 有一个 Abe,它可以...不采取任何措施从 Abe 那里得到号码。安倍必须允许 Bob 才能拿到号码。要执行此操作,请使用以下两种方式之一重新定义 Abe

class Abe
{
    private:
    int num;

    public:
        Abe();
        Abe(int);
        void showNumber();
        int getNumber()
        {
            return num;
        }
};

现在Bob可以

int number = a.getNumber();

或(这是第二个,因为它是不太受欢迎的选项,因为它紧密耦合 BobAbe

class Abe
{
    friend class Bob;
    private:
    int num;

    public:
        Abe();
        Abe(int);
        void showNumber();
};

Bob 现在可以完全访问 Abe 的内部结构,如果他愿意的话,真的可以把这个可怜的家伙搞得一团糟。这不好。反正现在Bob可以

int number = a.num;

Bob 可以读取 num,更改 num,将其设置为无可救药的坏值,通常是 Abe 的混蛋。还好Bob是朋友。另一个缺点是 Bob 现在需要知道 Abe 内部是如何工作的,如果 Abe 的代码改变了,Bob 也必须改变。