繁体   English   中英

课程组成

[英]Composition of classes

为什么在设置类组合时,可以使用默认构造函数调用包含的类,但不能使用带参数的类调用?

那有点令人困惑; 让我举一个例子。

#include "A.h"
class B
{
private:
    A legal; // this kind of composition is allowed
    A illegal(2,2); // this kind is not.
};

假设存在默认构造函数和存在2个整数的构造函数,则只允许其中一个。 为什么是这样?

这是肯定的,但你只需要以不同的方式编写它。 您需要为复合类的构造函数使用初始化列表:

#include "A.h"

class B
{
private:
    A legal; // this kind of composition is allowed
    A illegal; // this kind is, too
public:
    B();
};

B::B() :
    legal(), // optional, because this is the default
    illegal(2, 2) // now legal
{
}

您可以提供构造函数参数,但是您错误地初始化了您的成员。

#include "A.h"

class B
{
private:
    int x = 3; // you can't do this, either
    A a(2,2);
};

这是你的解决方案, ctor-initializer

#include "A.h"

class B
{
public:
    B() : x(3), a(2,2) {};
private:
    int x;
    A a;
};

类声明不会初始化组成该类的成员。 因此,当您尝试在声明中构建对象时出现错误。

成员初始化发生在类的构造函数中。 所以你应该写:

#include "A.h"
class B
{
public:
    B();
private:
    A a;
};

B::B() : 
    a(2,2)
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM