具有包含另一个类的对象的数组的子类的构造函数

Posted

技术标签:

【中文标题】具有包含另一个类的对象的数组的子类的构造函数【英文标题】:Constructor of a children class that have an array that contains objects of another class 【发布时间】:2015-05-22 06:21:27 【问题描述】:

对话框.h

#include "WBasic.h"
#include "WButton.h"
#include "WData.h"

#ifndef WDIALOG_H_INCLUDED
#define WDIALOG_H_INCLUDED


class WDialog : public WBasic


    private:
    WButton wB;
    WData wD;


    public:
    //Constructor
    WDialog(const int& e = 0, const WButton& = WButton(0,0), const WData& = WData(0,0,0));

    ~WDialog();

;


#endif // WDIALOG_H_INCLUDED

对话框.cpp

#include <iostream>
#include "WDialog.h"


WDialog::WDialog(const int& e, const WButton& WBUTTON, const WData& WDATA) :
WBasic(e), wB(WBUTTON), wD(WDATA)


上面的代码效果很好,但是我试图让“WButton wB”成为一个向量,将其更改为“WButton wB[3];”

class WDialog : public WBasic


    private:
    WButton wB[3];
    WData wD;

;

但是我不知道如何处理构造函数。

【问题讨论】:

然后你必须传递一个按钮数组。为什么不使用std::vectorstd::array 【参考方案1】:

你可以使用矢量来解决这个问题。 我在下面写了一个小例子。

#include <iostream>
#include <vector>
using namespace std;

    class A

    ;
    class B
        public:
            B():vec (4,A())
            
            
        private :
            vector<A> vec;
    ;
    int main() 
        // your code goes here
        B obj();

        return 0;
    

您可以观察我如何使用三个 A 类对象初始化向量 vec。

【讨论】:

【参考方案2】:

我认为如果可以(您的编译器支持 C++11)更喜欢 std::array

#include <array>

std::array<WButton, 3> wB;

然后在您的构造函数中使用初始化列表:

WBasic(e),
wBWButton(...), WButton(...), WButton(...),
wD(WDATA)

【讨论】:

以上是关于具有包含另一个类的对象的数组的子类的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

子类为啥要调用父类的构造函数

子类构造函数

子类都会首先调用父类的构造函数吗?

成员对象和封闭类

定义子类对象时要先调用基类构造函数,是应该哪样理解呢

在子类中使用父类的对象。您需要将对象作为类构造函数传递吗?