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

时间:2015-10-31 01:48:23

标签: c++ class variables constructor header

我有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类中使用它? 请帮忙。谢谢!

2 个答案:

答案 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=a1Abe传递给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也必须更改。