设为首页 加入收藏

TOP

C++类设计小结
2012-12-02 23:04:27 来源: 作者: 【 】 浏览:329
Tags:设计 小结

今天问了我大学同学一个问题:

    

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++(www.cppentry.com)的同事直接了当的说能;我大学的几个.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++(www.cppentry.com)的一个同学也说能;还提出了一个里氏代换---在设计代码架构的话,原则上是 父类能做的事情可以无压力的替换成子类。

课本上面的解释是这参数必须相同,显然继承关系不满足这个条件,但是这仍然让人好奇,但是在编辑器上面是无法通过的。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中类型转换运算符的使用方法 下一篇服务器设计笔记(5)-----分享几个..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: