以下是
http://www.cplusplus.com/doc/tutorial/polymorphism.html的多态性示例(可编辑性):
// abstract base class #include <iostream> using namespace std; class Polygon { protected: int width; int height; public: void set_values(int a,int b) { width = a; height = b; } virtual int area(void) =0; }; class Rectangle: public Polygon { public: int area(void) { return width * height; } }; class Triangle: public Polygon { public: int area(void) { return width * height / 2; } }; int main () { Rectangle rect; Triangle trgl; Polygon * ppoly1 = ▭ Polygon * ppoly2 = &trgl; ppoly1->set_values (4,5); ppoly2->set_values (4,5); cout << ppoly1->area() << endl; // outputs 20 cout << ppoly2->area() << endl; // outputs 10 return 0; }
我的问题是编译器如何知道ppoly1是一个Rectangle,ppoly2是一个三角形,以便它可以调用正确的area()函数?可以通过查看“Polygon * ppoly1 =& rect”来找到它并且知道rect是一个Rectangle,但是在所有情况下都不行,是吗?如果你做了这样的事情怎么办?
cout << ((Polygon *)0x12345678)->area() << endl;
假设你被允许访问那个随机的内存区域.
我会测试一下,但我现在不能在电脑上.
(我希望我没有缺少明显的东西…)