【问题标题】:C++ Member Initialization List / Creating Objects In A ClassC++ 成员初始化列表/在类中创建对象
【发布时间】:2014-10-13 13:30:24
【问题描述】:

我无法让我的代码正常工作。我对 C++ 很陌生,但基本上我想做的是在另一个类中创建一个类的对象。

我已经阅读了很多东西,试图让它发挥作用,但显然我完全错过了一些重要的步骤。

基本上调用MainWindow.load() 应该创建对象,MainWindow.loop() 应该返回它们。对于上下文,在最终项目中; MainWindow.load() 将设置纹理(只需执行一次),而 MainWindow.loop() 将连续绘制它们。

如果您能看一下我的示例代码,我将不胜感激:

#include <iostream>

class objects
{
private:
    int n;
public:
    void create (int);
    int output ();
};

void objects::create(int inputn)
{
    n = inputn;
}

int objects::output()
{
    return n;
}

class mainwindow
{
private:
    objects value1;
    objects value2;

public:
    void load();
    void loop();
};

void mainwindow::load()
{
    mainwindow() :  value1.create(56),
                    value2.create(72){}
}

void mainwindow::loop()
{
    std::cout << value1.output() << "\n";
    std::cout << value2.output() << "\n";
}

int main()
{
    mainwindow MainWindow;
    MainWindow.load();

    for(int i = 1; i <= 5; i++)
    {
        std::cout << "Loop " << i << ":\n";
        MainWindow.loop();
        std::cout << "\n";
    }

    return 0;
}

在此先感谢

【问题讨论】:

  • 构造函数初始化列表只能在构造函数中使用。
  • 你命名的“创建方法”应该是一个构造函数。这就是 ppl 发明 ctor 的目的。

标签: c++ class constructor initialization sfml


【解决方案1】:

您可以像这样简单地创建对象:

void mainwindow::load()
{
    value1.create(56);
    value2.create(72);
}

或者你可以在构造函数中不使用加载函数:

mainwindow::mainwindow()
    :value1(56),
    value2(72)
{
}

在这种情况下,您需要编写对象的构造函数

objects::objects(int arg = 0)
    :n(arg)
{
}

【讨论】:

  • 哇,太好了,两种解决方案都能正常工作,非常感谢您的帮助!我想最初我一定已经阅读了这两种方法,但对它们的理解不够好,无法让它发挥作用,所以我把它们一起拍成了一团乱麻!
猜你喜欢
  • 2011-12-01
  • 1970-01-01
  • 2011-05-11
  • 2017-03-30
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多