首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问有C++大型程序程序设计经验的大侠关于类层次结构的设计有关问题

2012-02-12 
请教有C++大型程序程序设计经验的大侠关于类层次结构的设计问题一个大型的程序,顶层有一个基类A,有很多个

请教有C++大型程序程序设计经验的大侠关于类层次结构的设计问题
一个大型的程序,顶层有一个基类A,有很多个层次的A的子类B,C,D,E...。原来的A里面有许多类似于如下类型的纯虚函数:
virtual   B*   Fun1()=0;
virtual   C*   Fun2()=0;
这就导致了一个问题,在A的声明部分必须include所有这些子类的头文件,请问如何克服这个问题,可以不用包括这些子类的头文件,因为这样耦合性太强了。另外请注意Fun1和Fun2在很多个子类中都得到了实现,所以原来的设计将其放于基类中似乎也不无道理,只是觉得不优雅。

[解决办法]
用类的前置声明啊。
在class A前面加class B;class C;。。。
建议看《Excetpional C++》有这个解耦问题的解答。
[解决办法]
一样

和纯虚没有关系。
只要你不需要访问 B 的细节即可。
[解决办法]
一些建议:
1.如果类的层次以及派生类比较多的情况,可以分层并且使用组合的方式。
2.可以考虑这样的虚函数:
2.1 在基类A中声明这样的虚函数:
virtual A* Func1() = 0;
2.2 在派生类B中声明这样的虚函数:
virtual B* Func1() = 0;
(注:这样的函数虚函数声明是允许的,只要保证B是A的派生类)
另外,使用前项声明也不失是一个好的方法。
[解决办法]
virtual B* GetB() = 0;
如果偶来做的话偶还是会做成virtual A* GetB() = 0;
而在调用端将它dynamic_cast成B。至少Office,IE的DOM类都是这样做的。虽然GetApplication()返回的是IApplication,但仍然使用IUnknown来传递这个指针。

热点排行