1
#include <iostream>
using namespace std;
class ShapeTwoD
{
public:
virtual int get_x(int);
protected:
int x;
};
class Square:public ShapeTwoD
{
public:
void set_x(int,int);
int get_x(int);
private:
int x_coordinate[3];
int y_coordinate[3];
};
int main()
{
Square* s = new Square;
s->set_x(0,20);
cout<<s->get_x(0)
<<endl;
ShapeTwoD shape[100];
shape[0] = *s;
cout<<shape->get_x(0); //outputs 100 , it doesn't resolve to
// most derived function and output 20 also
}
void Square::set_x(int verticenum,int value)
{
x_coordinate[verticenum] = value;
}
int Square::get_x(int verticenum)
{
return this->x_coordinate[verticenum];
}
int ShapeTwoD::get_x(int verticenum)
{
return 100;
}
shape [0]已被初始化爲Square。當我調用shape-> get_x時,我無法理解 爲什麼shape-> get_x不能解析爲最派生類,而是解析爲shape-> get_x的基類 類方法。我已經在我的基類中創建了get_x方法。虛擬函數不能解決大多數派生類方法
有人可以向我解釋爲什麼以及如何解決這個問題?
我有似曾相識VOUS –
你已經得到了'ShapeTwoD'的,不是的'Square's數組的數組。查看「對象切片」。 – jrok
可能重複[C++中的切片問題是什麼?](http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c) – jrok