You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将自身类实例传递给其他类?附代码实现疑问

能否将自身类实例传递给其他类?类设计是否存在问题?

当然可以把自身类的实例传递给其他类——你的代码只需要一个小修改就能正常运行,而且这种设计在很多场景下都是合理的(比如对象间协作、回调逻辑等)。

怎么修复你的代码?

在A的pass()方法里,你需要传递当前A对象的引用,直接用*this填充那个问号就好。因为doSth()的参数是const A&,而成员函数里的*this可以直接绑定到这个const引用上(哪怕pass()不是const成员函数也没关系,非const对象可以隐式转换为const引用)。

另外要注意循环依赖的前向声明:因为A里用到了B的实例,B里又用到了A的引用,所以必须在定义A之前先声明B,否则编译器会不知道B是什么类型。

修正后的完整代码如下:

// 前向声明B,让编译器知道这是一个类类型
class B;

class A {
public:
    void pass() {
        B ins;
        ins.doSth(*this); // 传递当前A对象的引用
    }
};

class B {
public:
    void doSth(const A &sth) {
        // 这里可以访问sth的public成员,如果需要访问private成员,可以把B声明为A的友元(按需使用)
    }
};

int main() {
    A te;
    te.pass();
}

关于类设计的合理性

就你目前给出的代码结构来看,这个设计是没问题的。如果B的doSth()确实需要依赖A的状态来完成任务,这种对象间的协作是很常见的。不过如果后续业务逻辑变得复杂,出现了A和B互相持有对方实例/指针的情况,那可能需要考虑拆分职责,避免过度耦合,但当前的写法完全符合C++的语法规范,也不存在设计上的硬伤。

内容的提问来源于stack exchange,提问作者RandomUser42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:35:58