gpt4 book ai didi

c++ - 在 C++ 中委托(delegate)(或类似的东西)

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:34 24 4
gpt4 key购买 nike

在 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();
}

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

最佳答案

由于 this 在 C++ 中是一个指针,您需要取消引用它:

b2.printBase1(*this);

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

比如你的签名是

void printBase1(Base1 b);

当你调用它时,你在函数中创建了一个参数的拷贝,从而对拷贝进行操作。您应该将其更改为:

void printBase1(Base1& b);

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

仅当您确定需要拷贝时才按值传递。

关于c++ - 在 C++ 中委托(delegate)(或类似的东西),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11000620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com