类构造函数中冒号之后的参数?

时间:2013-06-06 17:30:51

标签: c++

所以我正在研究一个问题,即我的工作是为战舰的C ++实现添加一些功能。一切都很好,花花公子但我在一艘2号船的构造函数中遇到过类似的东西:

class PatrolBoat : public Ship {
    private:
        int x, y;
        char deck[2];
    public:
        PatrolBoat(int x, int y) : x(x), y(y) {
            deck[0] = '_';
            deck[1] = '_';
        }
        virtual void draw(int x, int y){
            cout << deck[y - this->y];
        }
        virtual void shoot(int x, int y){
            deck[y - this->y] = 'T';
        }
};

我理解第一个冒号 - 它只是继承自它的父类Ship类。但是构造函数的部分怎么样:PatrolBoat(int x, int y) : x(x), y(y) {? x(x)和y(y)是什么意思?我无法理解它,也无法谷歌走出僵局。你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

这是[构造函数初始化列表]。

以这种方式执行操作与仅在构造函数中设置值之间的主要区别在于初始化列表允许您直接调用所需的构造函数,因此如果要调用非默认构造函数,则可以执行此操作。

这是一个示例,其中有一个Shape类,通过直接调用Point构造函数而不需要Point(x, y)构造函数,在其初始化列表中构造Point(),然后在point.x构造函数中单独设置point.yShape

class Point {
public:
  Point(int x_, int y_) : x(x_), y(y_) {};
private:
  int x;
  int y;
};

class Shape {
public:
  Shape(int x_, int_y) : point(x_, y_) {}
private:
  Point point;
};

此外,如果成员没有默认构造函数或标记为const,则必须通过初始化列表构建成员。

答案 1 :(得分:1)

它会调用xy的构造函数。它也适用于用户定义的构造函数。