设置与设置函数参数同名的私有数据成员

Setting private data members with same name as set functions parameters

本文关键字:设置 数据成员 函数 参数      更新时间:2023-10-16

如何正确设置这些私有成员:

private:
int x1,y1,x2,y2;

,当设置函数如下:

void setPos(int x1, int y1, int x2, int y2)

我不能简单地将x1设置为x1,不幸的是,我被参数和变量名的这种实现所困住了。

这是完整的头文件:

#ifndef SHIP_H
#define SHIP_H
class Ship
{
  public:
    virtual ~Ship(void) {}
    virtual const char *name(void) const = 0;
    virtual int size(void) const = 0;
    int getX(int i) const;
    int getY(int i) const;
    void print(void) const;
    bool includes(int x, int y);
    int level(void) const;
    void decreaseLevel(void);
    static Ship *makeShip(char ch, int x1, int y1, int x2, int y2);
  protected:
    void setPos(int x1, int y1, int x2, int y2);
    int lev;
  private:
    bool checkConfig(int x1, int y1, int x2, int y2);
    int x1,y1,x2,y2;
};
class AircraftCarrier : public Ship
{
  public:
    AircraftCarrier(int x1, int y1, int x2, int y2);
    virtual const char *name(void) const;
    virtual int size(void) const;
};
class BattleShip: public Ship
{
  public:
    BattleShip(int x1, int y1, int x2, int y2);
    virtual const char *name(void) const;
    virtual int size(void) const;
};
class Cruiser: public Ship
{
  public:
    Cruiser(int x1, int y1, int x2, int y2);
    virtual const char *name(void) const;
    virtual int size(void) const;
};
class Destroyer: public Ship
{
  public:
    Destroyer(int x1, int y1, int x2, int y2);
    virtual const char *name(void) const;
    virtual int size(void) const;
};
#endif

使用this指针:

this->x1 = x1; // etc.

或者用类名限定:

MyClass::x1 = x1; // etc.

另一种方法。修改参数的名称:

void setPos(int xa1, int ya1, int xa2, int ya2)
{
  x1 = xa1;
  y1 = ya1;
  x2 = xa2;
  y2 = ya2;
}

有两种方法

void setPos(int x1, int y1, int x2, int y2)
{
   this->x1 = x1; 
   this->y1 = y1; 
   this->x2 = x2; 
   this->y2 = y2;
}
void setPos(int x1, int y1, int x2, int y2)
{
   Ship::x1 = x1; 
   Ship::y1 = y1; 
   Ship::x2 = x2; 
   Ship::y2 = y2;
}

如果函数是在类之外定义的那么你必须写,例如

void Ship::setPos(int x1, int y1, int x2, int y2)
{
   this->x1 = x1; 
   this->y1 = y1; 
   this->x2 = x2; 
   this->y2 = y2;
}

编辑:对于你的代码,那么这些数据成员在相应的构造函数中设置如下方式例如

AircraftCarrier( int x1, int y1, int x2, int y2 )
{
   setPos( x1, y1, x2, y2 );
}

也不清楚船名存储在哪里