让我们有以下课程
class Animal
{
public:
virtual short getFeet() = 0;
virtual void setFeet(short feet) = 0;
};
和 2 个派生类:
class Bird : public Animal
{
short flying_speed;
public:
virtual short getFeet() { return 2; } // always 2 feet
virtual void setFeet(short feet_) { };
virtual short getFlyingSpeed() { return flying_speed; }
};
class Mammal : public Animal
{
short feet; // whale: 0 feet, human: 2 feet, others: 4 feet
public:
virtual short getFeet() { return feets; }
virtual void setFeet(short feet_) { feet = feet_ };
};
A)关于对象模型的问题:
让我们专注于财产的脚。如何处理属性 feet 和方法 getFeet() 和 setFeet()。
属于同一类的一些动物的足量不同,因此它们使用属性足和方法getFeet()
并且setFeet()
是常见的。
有些动物有相同数量的脚,所以它们不使用自己的属性feet
。该方法getFeet()
返回一个常量,该方法setFeet()
不做任何事情。
这个模型是正确的还是推荐与可变脚相关的任何更改(有很多动物没有脚)?
B)关于多态性的问题
一类具有某些特定特征;例如飞翔的鸟。所以问他们以什么速度飞行是有道理的,看方法getFlyingSpeed()
。
我们想使用多态性并创建一个指向 a 的指针Bird
:
int main(int argc, _TCHAR* argv[])
{
Animal *a = new Bird();
std:: cout << a->getFlyingSpeed() << '\t'; // error!
}
我想,编译器不会在编译期间检查正确的分配,但只有两种类型的运行时检查。但我错了,因为...
错误 C2039:
getFlyingSpeed
: 不是Animal
有什么办法,如何使用并非所有类都通用的属性和多态性?还是只能强制运行时类型 chcek ?
也许这个模型不正确。如何重新设计它?
谢谢你的帮助。