0

所以我正在研究一个问题,我的工作是为战舰的 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) 是什么意思?我无法理解它,也无法通过谷歌搜索走出僵局。能否请你帮忙?

4

2 回答 2

2

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

这样做与只在构造函数中设置值之间的主要区别在于初始化列表允许您直接调用您想要的构造函数,因此如果您想调用非默认构造函数,您可以这样做。

这是一个示例,其中您有一个通过直接调用构造函数而不是需要构造函数然后在构造函数中单独设置和来在其初始化列表Shape中构造 a 的类:PointPoint(x, y)Point()point.xpoint.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

于 2013-06-06T17:35:51.320 回答
1

它确实调用了xand的构造函数y。它也适用于用户定义的构造函数。

于 2013-06-06T17:33:34.003 回答