我现在有一个基类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赋不同值,就出不同鱼了