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

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

问题描述:

我有两个类,A类和B类。我不想让它们中的任何一个具有默认构造函数,因为它们都需要实例化带参数。然而,我似乎无法在类B中创建类A的对象,而无需使用默认的公共构造函数,该类允许在没有用户定义的值的情况下实例化类(试图避免默认值)。在没有指针的情况下,在另一个类构造函数中没有默认构造函数的C++实例化对象

这是我的设置:

对象我想其他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,但我似乎无法找到正确的语法/过程来完成这一点。

我已经阅读了与这个问题有关的问题,使用指针来实现这一点似乎是“初学者”的方式来解决这个问题,因为对象将需要手动销毁,所以我试图没有指针就可以做到这一点。可能吗?这个过程的最佳做法是什么?

,如果我一定要做到这一点,我将诉诸三分球,但我与操作挣扎过,因为如果我定义了一个为指针,而不是一个对象,我得到一个错误,当我这样做:

myClassA = & A(var1,var2);因为我的理解是“A(var1,var2)”的作用域是构造函数,并且在构造函数完成之后将被删除,所以我们不能使用这个扩展名,所以我们不能保存一个指针。所以我不确定我会如何在这种情况下使用指针方法。

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

编辑17年9月14日:

我忘了提,我也想有myClassA为B类的内部公共变量如果我没有默认的构造函数,我该怎么预防这从给我的“没有默认构造函数”错误?

-Thanks先进

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

谢谢。我喜欢这么快速的回复。但是,我怎样才能将myClassA定义为类B中的公共变量?它一直给我默认的构造函数错误。 – WhatIsASyntax

+0

@WhatIsASyntax它不应该犯一个错误。检查所有可能尝试调用'A'的默认构造函数的地方。这里有一个实例,它显示输出中没有编译器错误:http://coliru.stacked-crooked.com/a/d94463408244b094 –

+0

@WhatIsASyntax如果你想要一个指向'A'的指针作为'B'的成员,你可以做这样的事情:'class B {unique_ptr p; B :: B(int var1,int var2,int var3){p = make_unique (var1,var2);}'。 – AlexD

Alex的上述解释当然是正确的,但这里有一个链接,你太:http://en.cppreference.com/w/cpp/language/initializer_list

基本上,如果它是“后:但在构造函数体之前”它是与这些论点“构建”的。默认构造函数永远不会被调用。由于您只定义了一个非默认构造函数,因此您的class A没有无参数构造函数。

+0

非常感谢。这使得更多的意义!我不明白AlexD的答案如何解决公共变量声明,但这解释了一切。谢谢。 – WhatIsASyntax