21xrx.com
2024-11-05 19:34:37 Tuesday
登录
文章检索 我的文章 写文章
C++成员初始化顺序详解
2023-07-02 20:10:10 深夜i     --     --
C++ 成员初始化 顺序详解

在C++中,成员函数的初始化顺序是非常重要的。在一个类中,如果有多个成员变量,它们的初始化顺序将会决定程序的行为。因此必须了解其初始化顺序。

在C++中,构造函数是负责初始化对象的函数。默认情况下,C++编译器将按照下列顺序初始化类的数据成员:

1. 父类的构造函数会在子类前调用。

2. 类的成员会按照声明的顺序进行初始化,而不是按照它们出现在初始化列表中的顺序。

例如,我们有一个名为A的类,它有两个成员变量:m_X和m_Y:


class A

{

public:

  A(int x, int y);

private:

  int m_X;

  int m_Y;

};

A::A(int x, int y) :

  m_Y(y),

  m_X(x)

请注意,m_X和m_Y出现在初始化列表中的顺序与它们在类中声明的顺序相反。但是,m_X实际上会在m_Y之前进行初始化,因为它出现在类中的顺序在它们在初始化列表中的顺序之前。因此,在构造函数中访问成员变量时必须记住此顺序。

3. 基于理论上的安全性管理,在构造函数的初始化体中,不可以访问类中尚未初始化的成员变量。因此,如果想访问尚未初始化的成员变量,我们需要用到类的成员函数。

例如,再看一下上面的A类:


class A

{

public:

  A(int x, int y);

private:

  int m_X;

  int m_Y;

};

A::A(int x, int y) :

  m_Y(y)

{

  SetX(x);

}

void A::SetX(int x)

  m_X = x;

我们将m_X的初始化放在了SetX()函数中,因此我们可以在构造函数中访问m_X,而不会出现未定义的行为。

需要注意的是,成员初始化顺序是可能会因不同编译器而发生改变的,因此必须尤其小心梳理重要的程序中。

综上所述,我们非常重视成员初始化顺序在程序中扮演的重要角色,在程序设计中时刻牢记这一点。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复