我正在学习c ++,而且我对基础知识有疑问。 如何在不同的类中初始化对象?
例如我有代码:
class A {
private:
static int num;
static string val;
public:
A(int n, string w) {
num = n;
val = w;
}
};
我想在B类中创建对象A,所以我尝试这样:
class B {
private:
A objA;
public:
B(int numA, string valA){
objA = new A(numA, valA);
}
};
不同的方式(相同的构造函数):
public:
B(A obA){
objA = obA;
}
或
public:
B(int numA, string valA){
objA = A(numA, valA);
}
总是我收到错误:没有默认构造函数存在于类" A"。我已经读过默认构造函数是没有任何参数的构造函数,但是我给它们,为什么它是默认搜索?
答案 0 :(得分:2)
如果你想学习C ++ ...忘记java。 C ++变量是值,而不是引用伪装中的指针。
objA = new something
令人憎恶,因为objA
是A
而不是A*
。
您需要的是使用适当的参数
显式构造objA
class B {
private:
A objA;
public:
B(int numA, string valA)
:objA(numA, valA)
{
}
}
};
有关详情,请参阅http://en.cppreference.com/w/cpp/language/initializer_list
答案 1 :(得分:1)
您可以通过以下方式执行此操作
class B {
private:
A objA;
public:
B(int numA, string valA) : objA( numA, valA ) {}
};