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
的成员函数。但是,您不能访问私有成员。
一个解决办法是在Abe
class中增加一个getter成员函数returns num
成员,例如
int Abe::getNumber() const
{
return num;
};
然后就可以在Bob
class中使用了
std::cout << "the number is " << a.getNumber() << '\n';
a=a1
将传递给 Bob
的构造函数的 Abe
分配给 Bob
的 a
成员。使用更具描述性的变量名可能是个好主意,并且使用初始化列表可以获得一些优化。示例:
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();
或(这是第二个,因为它是不太受欢迎的选项,因为它紧密耦合 Bob
和 Abe
。
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
也必须改变。
我有 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
的成员函数。但是,您不能访问私有成员。
一个解决办法是在Abe
class中增加一个getter成员函数returns num
成员,例如
int Abe::getNumber() const
{
return num;
};
然后就可以在Bob
class中使用了
std::cout << "the number is " << a.getNumber() << '\n';
a=a1
将传递给 Bob
的构造函数的 Abe
分配给 Bob
的 a
成员。使用更具描述性的变量名可能是个好主意,并且使用初始化列表可以获得一些优化。示例:
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();
或(这是第二个,因为它是不太受欢迎的选项,因为它紧密耦合 Bob
和 Abe
。
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
也必须改变。