【问题标题】:parameter passed in constructor initialisation in c++在 C++ 中的构造函数初始化中传递的参数
【发布时间】:2015-04-08 07:28:58
【问题描述】:
class GameController;

class Snake : public QGraphicsItem {
public:
    enum Direction {
        NoMove,
        MoveLeft,
        MoveRight,
        MoveUp,
        MoveDown
    };

    Snake(GameController & controller); // <<<<<<<<<
};


Snake::Snake(GameController &controller) 
: head(0, 0)
, growing(7)
, speed(3)
, moveDirection(NoMove)
, controller(controller)
{ } 

这句话做了什么?我的意思是当构造函数被初始化时那个参数做了什么?

【问题讨论】:

  • 它的作用取决于你如何实现它。
  • 它无法编译,因为 Snake 没有名为 controller 的成员或基类 - 或者实际上是 headgrowing 等。没有完整的示例,任何人都知道吗?

标签: c++ constructor parameter-passing


【解决方案1】:

它的作用取决于你的构造函数代码。

参数在调用构造函数时生效。

当构造函数被调用时,它通过引用传递值,除非你提供你的代码,否则什么都不能说。

【讨论】:

  • 有很多cpp和头文件这是snake.cpp的内容#include #include "constants.h" #include "gamecontroller.h" #include "snake.h"静态常量 qreal SNAKE_SIZE = 10; Snake::Snake(GameController &controller) : head(0, 0), grow(7), speed(3), moveDirection(NoMove), controller(controller) { }
  • 该参数将您发送给它的任何对象的地址传递给它,然后将对象控制器发送给控制器(控制器)!!!!!!!!!。在您向我们提供更多代码或至少打算使用您的代码之前,我们无法给出更详细的解释,以便我们能够理解每个函数在做什么(也就是说,如果您是真正编写此代码的人)
【解决方案2】:
Snake(GameController & controller);

这句话做了什么?

这只是 Snake 构造函数的声明,将 GameController 引用作为参数。

我的意思是当构造函数被初始化时那个参数会做什么?

构造函数被初始化时,参数本身什么也不做。构造函数的主体代码可能会调用它的任何操作,或将其存储到类成员变量中(实际上就是这种情况,关于您的附加信息)。

但是这里不能说清楚,因为我们没有看到 Snake 构造函数的定义。

【讨论】:

  • gamecontroller 本身就是一个类。所以要实现它首先我们需要创建它的一个实例,不是吗?它是在创建实例吗?如果是这样,蛇的构造函数在 Snake::Snake(GameController &controller) 中有这个:head(0, 0),growth(7),speed(3),moveDirection(NoMove),controller(controller) { }
  • @Ccr "我们需要创建它的实例,不是吗?" 是的,您首先需要创建GameController 的实例并传递它,当构造一个蛇的实例。 Add additional info, about the constructor body to your question please.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 2021-11-27
  • 2017-03-07
  • 2020-05-05
  • 1970-01-01
相关资源
最近更新 更多