在没有指针的情况下,在另一个类构造函数中没有默认构造函数的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)
{}
Alex的上述解释当然是正确的,但这里有一个链接,你太:http://en.cppreference.com/w/cpp/language/initializer_list
基本上,如果它是“后:但在构造函数体之前”它是与这些论点“构建”的。默认构造函数永远不会被调用。由于您只定义了一个非默认构造函数,因此您的class A
没有无参数构造函数。
非常感谢。这使得更多的意义!我不明白AlexD的答案如何解决公共变量声明,但这解释了一切。谢谢。 – WhatIsASyntax
谢谢。我喜欢这么快速的回复。但是,我怎样才能将myClassA定义为类B中的公共变量?它一直给我默认的构造函数错误。 – WhatIsASyntax
@WhatIsASyntax它不应该犯一个错误。检查所有可能尝试调用'A'的默认构造函数的地方。这里有一个实例,它显示输出中没有编译器错误:http://coliru.stacked-crooked.com/a/d94463408244b094 –
@WhatIsASyntax如果你想要一个指向'A'的指针作为'B'的成员,你可以做这样的事情:'class B {unique_ptr p; B :: B(int var1,int var2,int var3){p = make_unique (var1,var2);}'。 – AlexD