C++ 在C+中调用基类构造函数+;
这是调用基类构造函数的合法方式吗 基类如下所示C++ 在C+中调用基类构造函数+;,c++,C++,这是调用基类构造函数的合法方式吗 基类如下所示 class base_class { public: base_class(int x, int y); protected: int a; int b; }; base_class::base_class(int x,int y) { a=x; b=y; } 派生类是一个 class derived_class: public base_class { public:
class base_class
{
public:
base_class(int x, int y);
protected:
int a;
int b;
};
base_class::base_class(int x,int y)
{
a=x;
b=y;
}
派生类是一个
class derived_class: public base_class
{
public:
derived_class(int x,int y,int z);
protected:
int c;
};
derived_class:: derived_class(int x,int y,int z):base_class(x,y) /*Edited and included the scope resolution operator*/
{
c=z;
}
< P>是在C++中定义一个派生类构造函数的方法,如果是的,基类构造函数是如何调用的?假设你是< /p>
derived_class::derived_class(int x,int y,int z):base_class(x,y)
// |
// scope resolution operator
那么是的。这不仅是一种合法的方法,也是为当前对象显式调用基构造函数的唯一方法
除非这样做,否则默认构造函数将被隐式调用。在您的情况下,基类没有默认构造函数,因此您会得到一个编译器错误。是的,这是正确的方法,实际上是调用的唯一方法,即在派生类之前调用基类构造函数。这是初始化基类的正确(也是唯一)方法如果调用的是非默认构造函数——当然,如果将第二个冒号添加到范围解析运算符中 通常在“初始值设定项列表”(冒号和函数体之间的部分)中初始化所有成员,如下所示:
derived_class::derived_class(int x,int y,int z):
base_class(x, y),
c(z)
{
}
…其中
c(z)
将int c
初始化为z
的值,而不是derived_class:dervied_class(…)
的语法错误(您缺少了一个额外的冒号),这看起来很好。从技术上讲,如果不显式执行,基类将使用默认构造函数初始化。没错base\u class
在本例中没有默认构造函数:)我知道(并提到了这一点)。只是觉得应该在答案里。