由彼此组成的类

Classes composed by each others

本文关键字:      更新时间:2023-10-16

考虑这个代码示例:

class Base
{
public:
    Base() {}      
};
class Derived1 : public Base
{
public:
    Derived1() : Base() {}
};
class Derived2 : public Base
{
public:
    Derived2() : Base() {}
};

有没有任何东西可以使派生 1 有 - a 派生 2 和派生 2 有 - a 派生 1?
最好的解决方案是使用具有这两个对象的第三个类。但是,如果需要高性能呢?

例如,双向客户端-服务器应用程序。

编辑:考虑到这只是一个摘要示例。在实际代码中,三个类中的每一个都可能引发异常;不过,我确保代码是异常安全的。

你可以

用一个前向声明来实现一个"has-a"关系,它基本上告诉"这个类存在,只是还没有声明"

#include <iostream>
using namespace std;
class Base
{
public:
    Base() {}      
};
// Forward declaration
class Derived1;
class Derived2 : public Base
{
    friend class Derived1;
public:
    Derived2() : Base() {}
private:    
    Derived1 *ptr;
};
class Derived1 : public Base
{
public:
    Derived1(Derived2& obj) : Base(), ptr(&obj) {
        obj.ptr = this;
    }
private:
    Derived2 *ptr;
};
int main() {
    Derived2 obj2;
    Derived1 obj1(obj2);

    return 0;
}

http://ideone.com/RVU8AR

这样,两个类就可以相互通信。请注意私有指针和构造函数的初始化。使用"friend"声明,一个类能够修改另一个类的私有成员。

每个类可以保存一个指针:?

class Derived1
    Derived2 *p_d2;
class Derived2
    Derived1 *p_d1;
相关文章:
  • 没有找到相关文章