由彼此组成的类
Classes composed by each others
考虑这个代码示例:
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;
相关文章:
- 没有找到相关文章