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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值