我有两个类,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;没有默认构造函数"错误?
答案 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))))
没有无参数构造函数。