实际编程中,类的继承最好控制在几层?为什么?
解决方案 »
- 计算机中USB记录清除疑问,求解决方案
- windows mobile播放声音的问题
- <向熟悉CTreeCtrl控件的朋友虚心请教>又一个棘手的问题?
- 问关于“error in OMF type information”的问题
- 紧急求解!望各位大虾救救我!!!!!
- vc++ 6.0 画圆,麻烦!
- LNK4089 all references to "dynamic-link library" discarded by /OPT:REF
- TrueType汉字字库中的笔划是怎么存放的?-------在线等候!
- 为什么《Visual C++技术内幕》里数据库的代码编译后运行出问题?
- 请问如何像winamp,金山毒霸一样修改标题栏,最大化、最小化按钮?有例程最好,[email protected]
- 公司里多人开发一个系统,一般如何做到并行工作?以dll方式?然后最后
- 怎样解决“计时器刷屏太快”的问题,在线等,谢谢
一般都四层,
最顶层一般都是 CObject你把这层 忽略了。
看需要而定吧
1)代码复用——特点是没有添加虚函数,而只是使用基类所具有的功能。通过继承复用代码很方便,但是继承是耦合性最强的重用方式,因此最好采用聚合代替继承。处于代码重用的考虑而使用的继承一般不会超过3层。2)为了逻辑抽象使用继承——特点是有虚函数。在使用虚函数的时候会出现一些问题,比如
class A
{
virtual void Func1();
virtual void Func2();
}void A::Func1()
{
DoSometh;
Func2();
}
void A::Func2()
{ DoSometh;}Class B : public A
{
virtual void Func1();
}void B::Func1()
{
DoOtherThing;
Func2();
DoAnotherThing;
}Class C : public B
{
virtual void Func2();
}void C::Func2()
{
DoSomeOtherThing;
}这个时候你调用C类的对象的Func1函数,你必须得保证Func2()的实现符合原来A定义的语义。3层都这个麻烦了,还敢多用几层吗? 呵呵
==================================
呵呵,现在还有不需要面试的吗?还笔试了呢,虽然我最讨厌笔试,但是我还是耐心的做了。
当时的想法只有一个:不管能不能成,做做试卷就当复习、练习了。
C++的聚合虽然能实现复用,但是我觉得不是一个好办法。因为聚合需要细小的设计,并且设计出来的类针对性比较强,复用起来的空间比较小,或者说对以后的可借鉴性比较少。
我在具体工作中,也没有发现有太大的利弊区别,可能是受到了开发领域的限制吧。希望 vcleaner(我没当大哥很久了.......) 可以举些例子谈谈。
_________________
流行的n层也不是指继承啊
第一:每一个类的实例都回有一个指向虚方法的指针,这些虚方法需要动态调用,性能上会有点下降(俺知道.net中好像是这样子,不过俺记得mfc4.2好像是并没有用标准C++的编译器来实现多态的,而是用了一连串很巧妙的宏<好像是深入浅出mfc说的>)。
第二:当你的类体系层次多了之后 在子类中很容易忘记你的上面那几个父类是怎么实现这个方法的,在视觉上会有些迷惑。一般来说,我们把一些功能做成接口。让我们的类是实现接口而不是从某个子类中派生。再次声明:俺只是个菜鸟,刚刚毕业入到一年,正愁着找个好公司,如果那里说的不对,希望老鸟多多指教。
第一:每一个类的实例都回有一个指向虚方法的指针,这些虚方法需要动态调用,性能上会有点下降(俺知道.net中好像是这样子,不过俺记得mfc4.2好像是并没有用标准C++的编译器来实现多态的,而是用了一连串很巧妙的宏<好像是深入浅出mfc说的>)。
第二:当你的类体系层次多了之后 在子类中很容易忘记你的上面那几个父类是怎么实现这个方法的,在视觉上会有些迷惑。一般来说,我们把一些功能做成接口。让我们的类是实现接口而不是从某个子类中派生。再次声明:俺只是个菜鸟,刚刚毕业入到一年,正愁着找个好公司,如果那里说的不对,希望老鸟多多指教。
1、如果一次给你很多Project,你感觉有可能不能按期完成,你将怎么做?
2、如果给你安排的一个任务你从来没有接触过,你将怎么做前期的准备工作?
1、如果一次给你很多Project,你感觉有可能不能按期完成,你将怎么做?
2、如果给你安排的一个任务你从来没有接触过,你将怎么做前期的准备工作
==================================================================
1,如实向上层反映
2,查资料,向做过的人请教
在基于对象的情况下,无论如何继承层次不能超过三层,否则继承体系的维护将成为一件不可能的事,这既反映在函数命名冲突覆盖方面,也反映在数据成员方面。客户用到这样的类体系,一定会想要干掉写这个库的程序员^_^
而面向对象的情况下,类继承体系应该适当地以设计模式作为建构基础,而到现在为止我遇到的设计模式没有哪个的继承层次是超过三层的。就算不考虑这个问题,我们也可以想想,当继承层次超过三层之后,很容易出现对具体类(相对于抽象类)的继承和菱形继承,这对于程序代码来说就是一场灾难,为了解决这些问题,我们于是不得不采用一些更复杂的技巧比如虚继承这样的东西。请一定为要维护你的代码的人想想,千万不要让他理解你的代码都变得不可能。至于MFC库和单根继承问题,都是争论的焦点,我水平不够,就不多说什么了。至少,MFC体系架构相对于现在的技术来说已经过时,甚至可以说变得很糟糕,这是个事实。嗯,大家嘴下留情
1、如果一次给你很多Project,你感觉有可能不能按期完成,你将怎么做?
2、如果给你安排的一个任务你从来没有接触过,你将怎么做前期的准备工作
==================================================================
1,据实反映,然后先做自己最熟悉的。
2,先接触同类的产品,再向做过的人请教。
对于不熟悉的项目,还是查资料先,如果能找到类似的演示软件最好,还要跟客户充分沟通,了解他们的想法。