21xrx.com
2025-04-17 11:22:29 Thursday
文章检索 我的文章 写文章
C++继承中的构造函数初始化
2023-07-03 09:15:56 深夜i     25     0
C++ 继承 构造函数 初始化

在C++继承中,当一个派生类继承自一个基类时,派生类中的构造函数需要初始化基类中的成员变量,以确保派生类对象中的基类部分正确地构造。下面介绍几种构造函数初始化的方式。

1. 使用初始化列表

初始化列表是一种最常用的初始化方式,它在构造函数的参数列表后使用冒号来表示,接着是用逗号分隔的初始化表达式列表。例如,下面的代码展示了如何在派生类构造函数中初始化基类成员变量:

class Base{
public:
  Base(int x):m_x(x){}
private:
  int m_x;
};
class Derived:public Base{
public:
  Derived(int x, int y):Base(x),m_y(y){}
private:
  int m_y;
};

2. 在函数体中初始化

除了使用初始化列表外,也可以在派生类构造函数的函数体中初始化基类成员变量。然而,这种方法很少使用,因为它会在构造函数体中对基类成员变量进行额外的初始化。

class Derived:public Base{
public:
  Derived(int x, int y):m_y(y)
    m_x = x; //在构造函数体中初始化基类成员变量
  
private:
  int m_y;
};

3. 基类默认构造函数

如果基类中没有带参数的构造函数,那么可以省略派生类构造函数中的初始化部分。因为在调用基类默认构造函数时,基类成员变量会自动被初始化为默认值。

class Base{
public:
  Base(){}
private:
  int m_x = 0; //m_x会被初始化为0
};
class Derived:public Base{
public:
  Derived(int y):m_y(y){}
private:
  int m_y;
};

在继承中,除了正确地初始化基类成员变量,还需要遵循其他规则,例如:不要在派生类中直接访问基类私有成员变量和函数,正确地使用虚函数等等。如果遵循这些规则,C++继承机制可以使代码更加简洁和易维护。

  
  

评论区

请求出错了