发布网友 发布时间:2024-05-12 04:12
共1个回答
热心网友 时间:2024-06-02 10:00
首先,使用虚函数需要有一个继承关系。如Dog的父类是Animal,其中A有个virtual void do(),你可以这样写:
Animal* b = new Dog(); //Dog是Animal
这样,b只能使用Animal中提供的方法,因为编译器只知道b是个Animal而不是是个Dog
这个时候,如果你调用 b->do(),那么,编译器会获取b的动态类型,也就是,此时b是当成Dog的,调用的是Dog::do()而不是Animal::do()
回到问题:
如果属性和方法实现不同,说明它们不应该是属于继承的关系。如果以后扩展的可能性小,可以用switch代替多态。
这个看情况而定。如果子类数量有限,且不复杂,可以用switch列出所有的情况。缺点是不利于扩展。多态的缺点是需要构造很多子类,会使得代码变得复杂,所以这个是看需求来的。
switch不是多态,它只是一种if判断语句,多态的行为是由编译器决定的。