在C++中调用基类构造函数
Calling Base Class Constructors in 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:
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;
}
这种定义派生类构造函数的方式在C++是否合法,如果是,如何调用基类构造函数?
假设你的意思
是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
的值。
是的,这是正确的方法,实际上是在派生类之前调用基类构造函数的唯一方法。
相关文章:
- C++17 使用驱动类常量作为基类构造函数的参数来初始化基类构造函数
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- 在成员构造函数之后调用基类构造函数
- 如何在将原始指针移动到基类构造函数之前从unique_ptr中提取原始指针
- C++:在共享对象中调用抽象基类构造函数/未定义的符号
- 如何在 C++ 中将参数传递给基类构造函数
- 将数据成员的指针传递给基类构造函数是否安全?
- 使用基类构造函数初始化儿童类
- 使用基类构造函数的子类构造函数的大纲定义
- MSVC 无法识别继承模板类的模板类的"直接"基类构造函数
- 子类的构造函数后跟冒号后的基类构造函数是什么意思?
- 是否可以使用基类构造函数通过派生类将值初始化为基类私有成员?
- 当派生类无法轻易将参数传递到基类时,如何调用基类构造函数
- 是否可以在运行时切换到不同的基类构造函数?
- 对基类构造函数的未定义引用
- 如何为基类构造函数中的每个子类执行特定任务
- 将类传递到基类构造函数的模板参数中?
- 如何在基类构造函数中使用派生类成员
- (为什么)纯虚拟派生类中是否需要虚拟基类构造函数调用?
- 使用相同的参数调用基类C++构造函数