私は C++ を初めて使用し、メンバー変数のポリモーフィズムについて質問があります。私は次のクラス定義を持っています -
class Car
{
public:
Car();
virtual int getNumberOfDoors() { return 4; }
};
class ThreeDoorCar : public Car
{
public:
ThreeDoorCar();
int getNumberOfDoors() { return 3; }
};
class CarPrinter
{
public:
CarPrinter(const Car& car);
void printNumberOfDoors();
protected:
Car car_;
};
と実装
#include "Car.h"
Car::Car()
{}
ThreeDoorCar::ThreeDoorCar()
{}
CarPrinter::CarPrinter(const Car& car)
: car_(car)
{}
void CarPrinter::printNumberOfDoors()
{
std::cout << car_.getNumberOfDoors() << std::endl;
}
問題は、次を実行すると、親クラスの getNumberOfDoors が呼び出されることです。メンバー変数 Car をポインターにすることでこの問題を回避できますが、ポインターではなく参照によって入力を渡すことを好みます (これが好ましいと理解しています)。私が間違っていることを教えていただけますか?ありがとう!
ThreeDoorCar myThreeDoorCar;
std::cout << myThreeDoorCar.getNumberOfDoors() << std::endl;
CarPrinter carPrinter(myThreeDoorCar);
carPrinter.printNumberOfDoors();