c++ - 从子类实例访问和更改父值

标签 c++ oop inheritance parent subclass

我是初学者并试图在此网站上找到答案,但我无法弄清楚如何解决我的特定 C++ OOP 问题。

简而言之:我想从子类实例访问和更改父类的值,但不知何故我的方法似乎不起作用。

示例:我的程序中有许多 Car 实例(使用新构造创建)。如果其中一个 Car 对象检测到碰撞,所有 Car 实例都应该反转它们的运动。注册碰撞的 Car 应该调用父级的 ChangeSpeed 方法或直接更改 speed 值。

问题:速度变量似乎没有更新。此特定代码/方法是否有问题,或者我是否必须在其他地方搜索我的问题?

// SpeedControl.h ------------------------------
class SpeedControl
{
public:
    void ChangeSpeed(int);
protected:
    int speed;
};

class Car:
        public SpeedControl
{
public:
    void MoveCar();
    void DetectCollision();

private:
    int position;
};


// SpeedControl.cpp ------------------------------
#include SpeedControl.h

SpeedControl::SpeedControl(void)
{
    speed = 10;
}

SpeedControl::~SpeedControl(void)
{
}

SpeedControl::ChangeSpeed(int _value)
{
    speed *= _value;
}


// Car.cpp ------------------------------
#include SpeedControl.h

Car::Car(void)
{
    position = 100;
}

Car::~Car(void)
{
}

Car::MoveCar()
{
    position += speed; // speed should be accessible?
}

Car::DetectCollision()
{
    speed *= (-1); // inverse speed variable in parent class to inverse direction of ALL cars
    // alternative:
    // ChangeSpeed(-1); // call parent function to inverse speed

}

最佳答案

这看起来像是一个问题,其中 observer pattern是正确的解决方案。

关于c++ - 从子类实例访问和更改父值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729378/

相关文章:

c++ - 'cv::Mat::type':非标准语法;使用 '&' 创建指向成员的指针

c++ - c 类型数组的返回迭代器?

language-agnostic - 流畅的界面是否违反了德米特定律?

java - 确保方法被调用

c++ - 指向可以更改指针的对象的智能指针

c++ - 如何在 C++11 constexpr 中检查 double 的位模式是 0x0?

android - 连接器设计模式?

c# - 库存控制系统的类结构

JAVA无法通过强制转换找到子类方法

c++ - C++中一些基本的继承问题