【问题标题】:C++ Instantiating a class, within a class. The correct way?C++ 在一个类中实例化一个类。正确的方法?
【发布时间】:2014-04-09 22:22:15
【问题描述】:

我正在努力在另一个类中实例化一个类。我主要关心的是......我在哪里放置构造函数?在头文件中?在类文件中?还是两者兼而有之?似乎没有什么工作正常。我会尽量把它简单化。让我知道它是否太简单了;) 我认为应该是这样的:

GameWorld.h:

#include "GameObject.h"

class GameWorld
{
protected:
    GameObject gameobject;
}

GameWorld.cpp:

#include "GameWorld.h"

void GameWorld::GameWorld()
{
    GameObject gameObject(constrctor parameters);
}

//When I compile the program, the values in the gameObject, are not set to anything.

所以这是我尝试过的事情之一。出于显而易见的原因,将构造函数放在标题中也不起作用;我不能给它任何来自 GameWorld 的参数。

这样做的正确方法是什么?

编辑:糟糕。删除了一些无用的东西。

【问题讨论】:

  • 你在标题中声明了类。在那里,您声明构造函数、析构函数等。然后在 cpp 文件中,定义构造函数。在这里你可以做一个初始化列表来初始化类中的所有成员变量。您还可以在显式构造函数中获取参数列表,并将这些输入设置为您想要的任何内容。

标签: c++ class object constructor instantiation


【解决方案1】:

您需要在包含类的初始化器列表中初始化GameObject 成员。

// In the GameWorld.h header..
class GameWorld
{
public:
    GameWorld(); // Declare your default constructor.

protected:
    GameObject gameobject; // No () here.
}

// In the GameWorld.cpp implementation file.
GameWorld::GameWorld() // No 'void' return type here.
  : gameObject(ctorParams) // Initializer list. Constructing gameObject with args
{
}

【讨论】:

  • 但是构造函数已经在cpp文件中了?不能有两个构造函数:/所以我将它添加到 cpp 文件中的委托人?编辑:啊,是的,这行得通!但是,这将如何与动态创建新对象一起工作?该死,我真的需要弄清楚如何让我的 vector 工作。我想这应该是另一个问题? :P
  • 构造函数需要在类声明中声明。然后它需要一个定义来说明它的实际作用。
  • 这就是动态分配的用途。查看指针、new 和 STL 结构,如矢量和映射。如果您对此有任何疑问,您应该发布一个新问题。
  • 非常感谢您的帮助!我自己不会想出来的:)
  • 所以我现在有另一个问题(我希望可以在这里添加它,因为它是从 this 派生的)如果我想为对象调用父构造函数怎么办?示例:GameWorld::GameWorld() : enemy1(parameters):GameObject(parameters) { 遗憾的是,这不起作用,那又如何呢? :P
【解决方案2】:

我相信您会希望在 GameWorld 标头中声明 GameObject,然后在 GameWorld 构造函数中创建 GameObject 对象。

//GameWorld.h
#include GameObject.h

class GameWorld
{
private:
    GameObject object;

};

//GameWorld.cpp
#include GameWorld.h

GameWorld::GameWorld()
{
   object();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2017-04-30
    相关资源
    最近更新 更多