У меня 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(), вместо этого я продолжаю вызывать версию ShapeTwoD метода computeArea(). Я читал в Интернете, что размещение ключевого слова виртуального позволит способу определить динамически, следовательно, позволяет мне назвать квадрат версии методы computeArea()
Почему это происходит и как я называю квадратные версии метод computeArea()
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
}
Ваш должен устранить проблему при составлении кода примера. Это [должно выводить 6] (http://ideone.com/aBuRid) после тривиальных исправлений. – juanchopanza
Даже без виртуального экземпляра 'Square' вызовет функцию' computeArea' в 'Square'. Я согласен, что это не тот код, с которым вы столкнулись. –
имеет значение, если я включаю только файл заголовков класса Square в основной метод, см. Правки – Computernerd