我有2小时和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??
}
所以如何获得&#34; num&#34;来自Abe类并在Bob类中使用它? 请帮忙。谢谢!
答案 0 :(得分:0)
int nrow;
int ncol;
int n = 0;
int m = 0;
printf ("Please enter number of rows.\n");
scanf ("%d", &nrow);
printf ("Please enter number of columns.\n");
scanf ("%d", &ncol);
printf ("Please enter desired matrix values.\n");
int matrix[nrow][ncol];
int mrow = nrow;
int mcol = ncol;
while (ncol > 0)
{
while (nrow > 0)
{
scanf ("%d", &matrix[n][m]);
n++;
nrow--;
}
ncol--;
n = 0;
m++;
nrow = mrow;
}
ncol = mcol;
nrow = mrow;
m = 0;
n = 0;
printf ("Original Matrix\n");
while (ncol > 0)
{
while (nrow > 0)
{
printf ("%3d", matrix[n][m]);
n++;
nrow--;
}
ncol--;
n = 0;
m++;
nrow = mrow;
printf ("\n\n");
}
printf ("The transpose of this matrix is:\n");
ncol = mcol;
nrow = mrow;
m = 0;
n = 0;
while (nrow > 0)
{
while (ncol > 0)
{
printf ("%3d", matrix[m][n]);
n++;
ncol--;
}
nrow--;
n = 0;
m++;
ncol = mcol;
printf ("\n\n");
构造函数中的分配就像任何其他分配一样,它将Bob
中的数据复制到a1
的方式与例如a
相同。这段代码会:
int a1 = 6;
...
int a;
a = a1;
在a
类中初始化Bob
对象后,可以像任何其他对象一样调用a
的成员函数。但是,您无法访问私人会员。
一个解决方案是将 getter 成员函数添加到Abe
类,该类返回num
成员,类似
int Abe::getNumber() const
{
return num;
};
然后你可以在Bob
类中使用它,如
std::cout << "the number is " << a.getNumber() << '\n';
答案 1 :(得分:0)
a=a1
将Abe
传递给Bob
的构造函数分配给Bob
的{{1}}成员。使用更具描述性的变量名称可能是一个好主意,并且使用初始化列表可以获得一些优化。例如:
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
也必须更改。