能否将自身类实例传递给其他类?附代码实现疑问
能否将自身类实例传递给其他类?类设计是否存在问题?
当然可以把自身类的实例传递给其他类——你的代码只需要一个小修改就能正常运行,而且这种设计在很多场景下都是合理的(比如对象间协作、回调逻辑等)。
怎么修复你的代码?
在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
相关产品推荐
相关产品推荐

