2

在 C++ 中,我有:

//Base1.h
#ifndef BASE1_H
#define BASE1_H
#include <iostream>
#include <string>
#include "Base2.h"

using namespace std;

class Base1{
    private:
        string name;
    public:
        Base1(string _name);
        void printSomething();
        string getName();
};
#endif

Base1.cpp我实现构造函数Base1(string _name)string getName()正常情况下,并且printSomething()

void Base1::printSomething(){
    Base2 b2;
    // how to pass a parameter in the following code?
    b2.printBase1();
}

// This is Base2.h
#ifndef BASE2_H
#define BASE2_H

#include <iostream>
#include <string>
#include "Base1.h"

using namespace std;

class Base2{
    public:
      Base2();
      void printBase1(Base1 b);
};
#endif

Base2()像往常一样实现构造函数,这是我的printBase1(Base1 b)

void Base2::printBase1(Base1 b){
    cout << b.getName();
}

所以,最后,我想printSomething()Base1课堂上使用,但我不知道如何在我的代码中将参数传递给上面的 in b2.printBase1()。在 C++printSomething()中有什么类似的东西吗?b2.printBase1(this)如果没有,你能给我一个建议吗?

4

1 回答 1

3

由于this是 C++ 中的指针,因此您需要取消引用它:

b2.printBase1(*this);

请注意,您有循环包含,您应该#include "Base2.h"Base1.h. 还要查看通过 ( const) 引用传递参数,尤其是对于非 POD 类型,否则您可能无法获得预期的行为。

例如,您的签名是

void printBase1(Base1 b);

当您调用它时,您会在函数中创建参数的副本,从而对副本进行操作。您应该将其更改为:

void printBase1(Base1& b);

或者

void printBase1(const Base1& b); //if you don't change b

仅当您确定需要副本时才传递值。

于 2012-06-12T16:18:16.127 回答