在另一个C ++类中使用参数化构造函数声明对象

时间:2020-10-18 08:52:19

标签: c++ class pointers constructor

我希望一个类的对象包含在另一个类中。

A类包含在B类内部,如下面的简单示例所示。

问题在于类A仅具有参数化的构造函数。

还有另一种方法可以在类B中声明A类对象,而不必使用指向类A的指针吗?

class A
{
    public:
        A(int var1, int var2);
    private:
        //...
};

class B
{
    public:
        B();
    private:
        A  a;      // Compiler error 
        A* a_ptr; // This will of course work fine. We can create a new A object with parameters any time using the a_ptr
};

1 个答案:

答案 0 :(得分:0)

A a; //编译器错误

除非 B 的构造函数以必需的参数(例如B() : a(an_int, an_int) {...})显式调用 A 的构造函数,否则将请求没有参数或所有参数的构造函数参数具有默认值,但您没有该构造函数,只有一个构造函数需要2个 int

还有另一种方法可以在类B中声明A类对象,而不必使用指向类A的指针吗?

您没有声明,而是 define /每次实例化 B <<的新实例时,实例化 A 的新实例。 / em>

请注意,您以后可以创建A的实例,而不必像使用 a_ptr 那样使用指针

std::vector<A> a;

,当您知道 A 的实例时,您需要做的事

a.push_back(A(an-int, an-int));

但是您只希望一个实例的事实在 a 的定义中不可见(出于欢迎的评论)