C++,默认构造函数
当超类中的构造函数接收参数时,它不再是默认的构造函数,对吧?例如C++,默认构造函数
class a {
public:
int a;
int b;
a(int c, int d){
cout<<"hello";
};
}
现在,当我尝试做一个子类,程序导致错误,它说:“没有默认构造函数是在超类中定义的”。我怎么解决这个问题?我知道,如果我删除了参数,一切都会好的,但我被告知不要在我的C++测试中这样做。请帮我弄明白。
通常你处理这与初始化列表:
#include <iostream>
class a {
public:
a(int c, int d) { std::cout << c << " " << d << "\n"; }
};
class b : public a {
public:
b() : a(1, 2) {}
};
int main() {
b x;
return 0;
}
我不允许修改编码,我只是为该超类添加了一些额外的子类。 – 2012-01-16 15:50:57
这不涉及修改基类,只涉及派生类(es)。为了完整性,我已经包含了一个基类定义,但是(例如)这里给出的'b'应该与您在问题中定义的'a'一起工作。 – 2012-01-16 15:53:10
我试过了,但visual studio强调整行b():a(1,2){}, – 2012-01-16 15:56:21
你必须提供一个不需要参数的构造函数。
a::a()
{
}
一旦你为你的类提供任何构造函数,编译器不产生隐含的默认构造函数不带任何参数。所以如果你的代码需要一个没有参数的构造函数,你将不得不自己提供它。
我刚刚尝试过,但它给了我同样的错误+ a :: a(){}中的一个新错误。任何想法? – 2012-01-16 15:49:09
请将您的代码张贴在Question.Unless中显示您所尝试的内容如何获得帮助? – 2012-01-16 15:50:40
我给了一个代码,我不允许修改它。我要求做的是添加两个基于给定的超类的子类,类是这样的:class a { public: \t int x; \t string h; \t a(int y,string d){ \t \t y = 10; \t d =“hello”; \t cout 2012-01-16 15:52:44
如果你的基类不是默认 - 构造的,或者如果你不希望向使用基类的默认构造函数,然后你只需要告诉的派生类中如何构建基子:
struct b : a
{
b(int n) : a(n, 2*n) { }
// ^^^^^^^^^ <-- base class initializer, calls desired constructor
};
这是有关:http://stackoverflow.com/questions/5577663/about-base-class-in-derived-class -initialization – 2012-01-16 15:43:10