用c ++代表(或类似的东西)

时间:2012-06-12 16:16:12

标签: c++ delegates

在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,但我不知道如何将参数传递给b2.printBase1()中的printSomething()作为在我的代码中。在C ++中有什么类似b2.printBase1(this)的东西吗?如果没有,你能给我一个建议吗?

1 个答案:

答案 0 :(得分: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

只有当您确定需要副本时,才能按值传递。