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

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

本文关键字:构造函数 然后 另一个 变量 c++ 一个 获取      更新时间:2023-10-16

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

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类中获得"num"并在Bob类中使用它呢?请帮忙。非常感谢。

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也必须更改。

Bob构造函数中的赋值与任何其他赋值一样,它将数据从a1复制到a中,复制方式与以下代码相同:

int a1 = 6;
...
int a;
a = a1;

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

一个解决方案是向Abe类添加一个getter成员函数,该函数返回num成员,类似

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

然后你可以像一样在Bob类中使用它

std::cout << "the number is " << a.getNumber() << 'n';
相关文章: