C++ 构造函数的初始化列表提供了一种更高效的方式来初始化成员变量,它可以避免使用多余的赋值操作,从而提高代码的性能和可读性。在本文中,我们将为大家介绍 C++ 构造函数初始化列表的完整攻略,帮助大家理解其基本概念和常见用法。
什么是构造函数初始化列表?
C++ 构造函数初始化列表是一个构造函数的一部分,其用法是在构造函数的参数列表后紧跟着使用冒号“:”加上初始化列表,用逗号分隔每一个初始化表达式。其基本语法如下:
class Classname
{
public:
Classname(int a, float b, double c); // 构造函数声明
private:
int a;
float b;
double c;
};
// 构造函数定义
Classname::Classname(int a, float b, double c)
: a(a), b(b), c(c)
{
// 构造函数体
}
在这个例子中,冒号后的 a(a), b(b), c(c)
就是初始化列表,它们按照成员变量的声明顺序依次初始化。
为什么使用构造函数初始化列表?
使用构造函数初始化列表可以带来一些好处:
- 初始化成员变量:在进行对象实例化时,构造函数初始化列表能够直接初始化成员变量,避免使用多余的赋值操作,提高代码效率。
- 带有 const 和引用的成员变量:在构造对象时,const 和引用类型的成员变量必须进行初始化,使用初始化列表可以保证其正确的初始化。
初始化列表的使用方法:
初始化列表的作用是为成员变量提供初值,其基本格式如下:
Classname::Classname(int _a, float _b, double _c)
: a(_a), b(_b), c(_c)
{
// 构造函数体
}
- 在冒号后面列出需要初始化的成员变量,用逗号隔开。
- 使用拷贝构造函数进行初始化,可以使用“=”或“()”赋值。
- 可以通过调用该成员的构造函数进行初始化。
下面是两个示例:
1. 初始化一个成员对象
class Point
{
public:
Point(int x, int y) : m_x(x), m_y(y) {};
~Point() = default;
private:
int m_x;
int m_y;
};
class Circle
{
public:
Circle(int x, int y, int r)
: m_center(x, y), m_radius(r)
{
// 构造函数体
}
~Circle() = default;
private:
Point m_center;
int m_radius;
};
int main()
{
Circle circle(1, 2, 3);
return 0;
}
在这个例子中,类 Circle 中包含一个成员变量 m_center,它是类 Point 的对象. 我们在 Circle 的构造函数中通过初始化列表直接初始化了 m_center。
2. 初始化 const 和引用类型的成员变量
class A
{
public:
A(int i) : m_i(i), m_j(0), m_k(&m_i) {};
~A() = default;
private:
const int m_i;
int m_j;
int* const m_k;
};
class B
{
public:
B(int a, int b, int c)
: m_a(a), m_b(b), m_c(c), m_obj(a)
{
// 构造函数体
}
~B() = default;
private:
const int m_a;
int& m_b;
int* const m_c;
A m_obj;
};
int main()
{
int i = 42;
int j = 0;
int* const k = &i;
B b(i, j, k);
return 0;
}
在这个例子中,类 B 中包含一个 const int 类型的成员变量 m_a,一个 int& 类型的成员变量 m_b,和一个指向 int 类型的常量指针的成员变量 m_c。在类 B 的构造函数中,我们通过使用构造函数初始化列表对其进行了初始化,保证了这些成员变量的正确性。
总结
本文介绍了 C++ 构造函数初始化列表的基本概念和常见用法,包括其作用、使用方法和示例。使用构造函数初始化列表能够避免多余的赋值操作,提高代码效率和可读性。在实际的编程中,我们需要注意使用初始化列表来正确地初始化 const 和引用类型的成员变量等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++ 构造函数的初始化列表 - Python技术站