【发布时间】:2017-12-06 11:16:57
【问题描述】:
所以在我的大富翁游戏中,我有基类Field、派生类Property : public Field 和Board,其中包含Field 类型的数组。
class Field {
protected:
int m_position;
public:
Field() { }
Field(int p_position) : m_position(p_position) { }
virtual void showProperty() const { std::cout << "Actuall output"; };
};
下一个类是从 Field 派生的 Property
class Property : public Field {
float m_price;
public:
Property(int, float);
void showProperty() const;
};
在property.cpp中
Property::Property(int p_position, float p_price) : Field(p_position), m_price(p_price) { }
void Property::showProperty() const {
std::cout <<
"Position: " << m_position << "\n" <<
"Price: " << std::to_string(m_price) << "\n";
}
现在让我们看看 board.h
constexpr int BOARD_SIZE = 40;
class Board {
std::unique_ptr<Field[]> m_board;
public:
Board();
Field getField(int index) { return m_board[index]; }
};
及其构造函数
Board::Board() {
m_board = std::make_unique<Field[]>(BOARD_SIZE);
Property test(1, 100);
m_board[0] = test;
}
主要是我创建了这样的东西
int main() {
Board newBoard;
newBoard.getField(0).showProperty();
}
我希望它调用Property::showProperty(),但它调用Field::showProperty()。为什么不使用派生类函数?
【问题讨论】:
标签: c++ polymorphism virtual smart-pointers