如何在基类中引用派生类的变量。

我现在有一个基类fish,和四个派生类四种鱼。每种鱼的初始移动速度不一样。

CFish::CFish(CAquarium* aquarium, const std::wstring& filename) :
    CItem(aquarium, filename)
{
    mSpeedX = mInitialSpeedX + ((double)rand() / RAND_MAX) * MaxSpeedX;
    mSpeedY = mInitialSpeedY + ((double)rand() / RAND_MAX) * MaxSpeedY;
}

我现在需要在基类中定义这个mInitialSpeedX 和 mInitialSpeedY

我的助教和我说需要用到setter。但是我不知道如何在基类中引用派生类的变量来达到这个目标。

    ///  the Setter to assgin initial speedX
    /// <param name="SpeedX"></param> the initial speedX need to be assign
    virtual void SetterX(double SpeedX) { mInitialSpeedX = SpeedX; }

    ///  the Setter to assgin initial speedY
    /// <param name="SpeedX"></param> the initial speedY need to be assign
    virtual void SetterY(double SpeedY) { mInitialSpeedY = SpeedY; }

private:
         /// Fish initial speed in the X direction
    double mInitialSpeedX;

    /// Fish initial speed in the Y direction
    double mInitialSpeedY;

这是我现在做出来的setter。但是我不会下一步了,如何确保每一种鱼的速度都是不一样的。我想把这些setter放到派生类中,也不知道具体怎么操作。

mInitialSpeedX 和 mInitialSpeedY应该定义在基类中才make sense

1.virtual double getmInitialSpeedX(double speed);
非要实现,在基类中定义这个类,派生类里实现即可

2.其实鱼的速度可以视为公共成员变量,放在基类里也是可以的

这…… 你这初始速度值可以定义在基类里啊,对派生类实例初始化的时候,也就是构造函数里,分别进行不同的初始化就可以啊。
这就是面向对象的多态和继承啊。继承之后是可以有自己的修改的哇。
正如上面的回答一样,这本身就是鱼所共有的属性,为什么不在基类定义呢?

CFish::CFish(CAquarium* aquarium, const std::wstring& filename) :
CItem(aquarium, filename)
{
mSpeedX = mInitialSpeedX + ((double)rand() / RAND_MAX) * MaxSpeedX;
mSpeedY = mInitialSpeedY + ((double)rand() / RAND_MAX) * MaxSpeedY;
}
这个写法不对,这是构造函数
CFish::CFish(CAquarium* aquarium, const std::wstring& filename,double mX,double mY,double maX,double maY) :
CItem(aquarium, filename),mInitialSpeedX(mX),mInitialSpeedY(mY),MaxSpeedX(maX),MaxSpeedY(maY)
{
mSpeedX = mInitialSpeedX + ((double)rand() / RAND_MAX) * MaxSpeedX;
mSpeedY = mInitialSpeedY + ((double)rand() / RAND_MAX) * MaxSpeedY;
}

构造函数是第一个运行的函数,mInitialSpeedX,mInitialSpeedX,MaxSpeedX,MaxSpeedY这个里面必须先初始化才能用
给这几个mInitialSpeedX,mInitialSpeedX,MaxSpeedX,MaxSpeedY赋不同值,就出不同鱼了