私は2つのクラスを持っています: ShapeTwoD & Square
正方形は ShapeTwoD から派生します
クラス ShapeTwoD
class ShapeTwoD
{
public:
ShapeTwoD();
ShapeTwoD(string,bool);
string getName();
void setName(string);
bool getContainsWarpSpace();
void setContainsWarpSpace(bool);
void toString();
virtual double computeArea(){return 2+3.0};
virtual bool isPointInShape(int,int);
virtual bool isPointOnShape(int,int);
private:
string name;
bool containsWarpSpace;
};
クラススクエア
#include "ShapeTwoD.h"
class Square:public ShapeTwoD
{
public:
virtual double computeArea(){return 2+4.0};
};
私のメインメソッドでは、メソッドcomputeArea()のSquareバージョンを呼び出そうとしていますが、代わりにメソッドcomputeArea()のShapeTwoDバージョンを呼び出し続けています。キーワードvirtualを配置すると、メソッドを動的に決定できるため、Square バージョンのメソッド computeArea() を呼び出すことができることをオンラインで読みました。
なぜこれが起こっているのか、メソッドcomputeArea()のSquareバージョンを呼び出すにはどうすればよいですか
using namespace std;
#include "Square.h"
int main()
{
Square s;
s.setName("Sponge");
cout<<s.computeArea(); //outputs 5 when i expect it to output 6
}