C ++实例化没有指针的另一个类构造函数中没有默认构造函数的对象

时间:2017-09-14 19:26:12

标签: c++ object constructor instantiation

我有两个类,A类和B类。我不希望它们中的任何一个拥有默认构造函数,因为它们都需要使用参数进行实例化。但是,我似乎无法在类B内部创建类A的对象,而不使用默认的公共构造函数,该构造函数允许在没有用户定义的值的情况下实例化类(尝试避免使用默认值)。

这是我的设置:

我试图在其他类B中初始化的对象类:

ClassA.h

Class A  //No default constructor
{
public:
    A(int var1, int var2);    //Class A's Constructor
}

我想创建一个实例化B对象的实例,因为我需要传递给B类的值来实例化A类。

ClassB.h

Class B   //No default Constructor
{
public:
    A myClassA;    //The public variable in class B I want to hold an object of class A

    int somePublicVar;

    B(int var1, int var2, int var3);    //Class B's Constructor

}

我似乎无法获得类型A的myClassA对象来实例化。

ClassB.cpp

B::B(int var1, int var2, int var3)
{
    B = A(var1, var2);
    somePublicVar = var3
}

我是C++的新手,但我对C#C非常熟悉。但我似乎无法找到正确的语法/过程来完成此任务。

我越是阅读与此问题相关的问题,使用指针实现这一目标的似乎就越多,初学者"解决这个问题的方法,因为对象需要手动销毁,所以我试图在没有指针的情况下这样做。可能吗?这个过程的最佳实践是什么?

如果我必须实现这一点,我将使用指针,但我也在努力解决这个问题,因为如果我将A定义为指针而不是对象,那么当我这样做时会出错:

myClassA = &A(var1, var2);

我明白了:

  

"使用非标准扩展名:用作左值的等级右值"

因为我的理解是A(var1, var2)范围是构造函数,并且在构造函数完成后将被删除,因此我们无法保存指向它的指针。所以我不确定在这种情况下如何利用指针方法。

我似乎只能找到这个问题的部分答案,但似乎没有一个能满足所有条件。我很感激帮助。

编辑9/14/17:

我忘了提到我也在尝试将myClassA作为B类中的公共变量。如果我没有默认构造函数,我怎么能阻止它给我& #34;没有默认构造函数"错误?

2 个答案:

答案 0 :(得分:5)

B::B(int var1, int var2, int var3) : myClassA(var1, var2)
{}

答案 1 :(得分:1)

亚历克斯上面的解释当然是正确的,但这里也有一个链接:http://en.cppreference.com/w/cpp/language/initializer_list

基本上,如果它"之后:但在构造函数体之前"它是"构建"有了这些论点。永远不会调用默认构造函数。由于您只定义了非默认构造函数,因此(defun test () (do ((n 2 (1+ n)) (m 1 (1+ m)) (a (1+ n)) (b (1+ m)) (c (+ n m))) ((= n 10) (* a b c)) (print (* a b c)))) 没有无参数构造函数。