C++类设计小结
2012-10-26 13:52
176 查看
今天问了我大学同学一个问题:
上面代码中的 handle_input 能否表现出多态性?
我广州的C++的同事直接了当的说能;我大学的几个.net同学,对此模棱两可,说“应该能”。 想起在广州工作的时候,主程说过的话:面对代码的时候,不能有任何的猜测。在此感激一下之前的主程。
我们知道,类的多态性是在动态编译的时候,而template在编译的时候就确定了类型,所以多态性的表现滞后于template,上面的代码绝对可以表现出多态性。但是我们仍然要验证一下!
程序通过编译。OK!
更前面一段时间 我问过我同学一个这样的问题:
上面的handle_input能否表现出多态性,很多.net的同学说能,C++的一个同学也说能;还提出了一个里氏代换---在设计代码架构的话,原则上是 父类能做的事情可以无压力的替换成子类。
课本上面的解释是这参数必须相同,显然继承关系不满足这个条件,但是这仍然让人好奇,但是在编辑器上面是无法通过的。
template<class Type> class base { public: virtual int handle_input(Type data) = 0; }; class Extend:public base<int> { public: virtual int handle_input(int data); };
上面代码中的 handle_input 能否表现出多态性?
我广州的C++的同事直接了当的说能;我大学的几个.net同学,对此模棱两可,说“应该能”。 想起在广州工作的时候,主程说过的话:面对代码的时候,不能有任何的猜测。在此感激一下之前的主程。
我们知道,类的多态性是在动态编译的时候,而template在编译的时候就确定了类型,所以多态性的表现滞后于template,上面的代码绝对可以表现出多态性。但是我们仍然要验证一下!
template<typename Type> class Base { public: virtual int handle_input(Type data) = 0; }; class Sub:public Base<int> { public: int handle_input(int data) { printf("ok\n"); return 0; } }; void print(Base<int> &base) { base.handle_input(0); } int main(int argc,char** argv) { Sub _sub; print(_sub); return 0; }
程序通过编译。OK!
更前面一段时间 我问过我同学一个这样的问题:
class BaseType { }; class SubBaseType : public BaseType { }; class Base { public: virtual int handle_input(BaseType data) = 0; } class Sub:public Base { public: virtual int handle_input(SubBaseType data); }
上面的handle_input能否表现出多态性,很多.net的同学说能,C++的一个同学也说能;还提出了一个里氏代换---在设计代码架构的话,原则上是 父类能做的事情可以无压力的替换成子类。
课本上面的解释是这参数必须相同,显然继承关系不满足这个条件,但是这仍然让人好奇,但是在编辑器上面是无法通过的。
相关文章推荐
- java设计模式之单例模式5种方法及优缺点小结
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- StoneAgeDict现阶段设计小结
- 经验分享:360安全桌面主题设计小结
- 设计模式-小结-4
- windows服务结构设计小结,一劳永逸(个人拙见,老鸟请指正)
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- (转)QQ手机版 5.0“一键下班”设计小结
- Visual Basic通用报表设计小结
- 建议在设计C++类时提供默认构造函数,这应该是个好的习惯
- 创建型设计模式小结
- 数据库表设计小结(1)
- MySQL及数据库设计小结
- 设计模式小结
- C++类和接口的设计原则探讨
- 设计模式-简单工厂、工厂方法、抽象工厂之小结与区别
- 项目数据库设计小结
- C++类设计
- 最常用的12种设计模式小结
- GOF设计模式学习小结(一)