【发布时间】:2015-04-30 23:33:27
【问题描述】:
// multiple inheritance
#include <iostream>
using namespace std;
class Polygon {
protected:
int width, height;
public:
Polygon (int a, int b) : width(a), height(b) {}
virtual int area()=0;
virtual void print(){
cout << "area = " << area() << endl;
};
};
class Rectangle: public Polygon{
public:
Rectangle (int a, int b) : Polygon(a,b) {}
int area () { return width*height; }
void print(){
cout << "area = " << area() << endl;
};
};
class Square: public Rectangle{
public:
Square (int a, int b) : Rectangle(a,b) {}
int area () { return width*height/2; }
};
int main () {
Square sq (4,5);
sq.print ();
return 0;
}
在这个函数中,print 调用 Square(不是 Rectangle)的 area()。为什么?由于 Rectangle 中的 area() 不是虚拟的,它应该从 Rectangle 中调用 area()。最终结果是 10。据我说应该是 20。
【问题讨论】:
-
正方形的面积是从什么时候开始的width*height/2???
标签: c++ inheritance