#include <iostream>
class A {
int x, y;
public:
A(int _x = 0, int _y = 0) : x(_x), y(_y) {
std::cout << "Constructeur de A \n";
std::cout << "x = " << x << ", y= " << y << std::endl;
}
};
class B : A {
int d;
public: B(int x, int y, int _d=2) : A(x,y), d(_d) {
std::cout << "Constructeur de B \n";
std::cout << "d = " << d<< std::endl;
}
};
所以我有上面的代码无法编译。我的问题是为什么不d
初始化Base
类参数就不能初始化?就像说我不能让用户仅提供一个值d
并使用基类默认参数(我发现再次初始化基类参数是多余的,如果我想将默认值更改为其他值会很有意义)。 。错误消息并不能告诉我太多'B': no appropriate default constructor available
。
如果要删除错别字并添加带有B类一个参数的构造函数,则代码将成功编译
#include <iostream>
class A {
int x, y;
public:
A(int x = 0, int y = 0) : x(x), y(y) {
std::cout << "Constructeur de A \n";
std::cout << "x = " << x << ", y= " << y << std::endl;
}
};
class B : A {
int d;
public:
B( int d ) :d( d )
{
std::cout << "Constructeur de B( int ) \n";
std::cout << "d = " << d<< std::endl;
}
B(int x, int y, int d=2) : A(x,y), d(d)
{
std::cout << "Constructeur de B( int, int, int ) \n";
std::cout << "d = " << d<< std::endl;
}
};
int main()
{
B b( 1 );
return 0;
}
它的输出是
Constructeur de A
x = 0, y= 0
Constructeur de B( int )
d = 1
A类具有默认构造函数。它唯一明确定义的构造函数是该类的默认构造函数。
该代码还使用在线MS C ++编译器进行编译。
至于这个错误信息
'B':没有合适的默认构造函数
那么B类确实没有默认构造函数。但是,例如,您可以通过以下方式重新定义其构造函数
B( int d = 0 ) :d( d )
{
std::cout << "Constructeur de B( int ) \n";
std::cout << "d = " << d<< std::endl;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句