下面我就详细地讲解一下“C++构造函数初始化列表的实现详解”的攻略和示例:
C++构造函数初始化列表的实现详解
1. 什么是C++构造函数初始化列表?
在C++中,构造函数可以用来初始化一个对象的成员变量和基类对象。通常,我们使用赋值语句来达到这个目的,例如:
class Point {
public:
Point(int x, int y) {
m_x = x;
m_y = y;
}
private:
int m_x;
int m_y;
};
然而,使用赋值语句并不是最好的方式。因为在构造函数中使用赋值语句来对成员赋值时,实际上是先创建成员变量的默认构造函数,然后再调用赋值语句给成员变量赋值。这样做虽然可行,但是会浪费一些不必要的时间和空间。
所以,C++提供了一个更好的初始化成员变量的方式——构造函数初始化列表。使用构造函数初始化列表,可以在调用成员变量的构造函数之前为成员变量赋初值,效率更高。例如:
class Point {
public:
Point(int x, int y): m_x(x), m_y(y) {}
private:
int m_x;
int m_y;
};
在上面的示例中,构造函数初始化列表m_x(x),m_y(y)
将x
和y
的值分别传递给了m_x
和m_y
,从而实现了成员变量的初值赋值。
2. 构造函数初始化列表的语法
C++构造函数初始化列表的语法如下:
class ClassName {
public:
ClassName(Type1 arg1, Type2 arg2, ...): member1(arg1), member2(arg2), ... {}
private:
MemberType1 member1;
MemberType2 member2;
...
};
其中,arg1
、arg2
等是构造函数的参数,member1
、member2
等是成员变量。
构造函数初始化列表的作用是为成员变量赋初值。在构造函数中创建一个类对象时,初始化列表会在进入构造函数的函数体之前执行。在初始化列表中,可以使用成员变量的构造函数或赋值运算符对成员变量进行初始化赋值。
3. 构造函数初始化列表的使用
下面举两个例子来说明构造函数初始化列表的使用。
例子1:一个包含一个对象成员的类的构造函数初始化列表
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
Person(const string& name, int age): m_name(name), m_age(age) {
cout << "Person constructor called" << endl;
}
private:
string m_name;
int m_age;
};
class Student {
public:
Student(const string& name, int age, const string& major): m_person(name, age), m_major(major) {
cout << "Student constructor called" << endl;
}
private:
Person m_person;
string m_major;
};
int main() {
Student s("Tom", 20, "Computer Science");
return 0;
}
在这个示例中,Person
类有一个包含一个字符串和一个整数的构造函数,Student
类包含一个Person
类型的对象和一个字符串成员变量。在Student
类的构造函数初始化列表中,先使用Person
类的构造函数对成员变量m_person
进行赋值初始化,再用变量major
的值对成员变量m_major
进行赋值初始化。
例子2:使用构造函数初始化列表对数组成员赋初值
#include <iostream>
using namespace std;
class IntArray {
public:
IntArray(int size) {
m_data = new int[size];
m_size = size;
for (int i = 0; i < size; ++i) {
m_data[i] = i + 1;
}
}
~IntArray() {
delete[] m_data;
}
void displayData() {
for (int i = 0; i < m_size; ++i) {
cout << m_data[i] << " ";
}
cout << endl;
}
private:
int* m_data;
int m_size;
};
class Test {
public:
Test() : m_array{3, 5, 7, 9} {}
void displayData() {
m_array.displayData();
}
private:
IntArray m_array;
};
int main() {
Test t;
t.displayData();
return 0;
}
在这个示例中,IntArray
类用来定义一个整型数组对象,其中的构造函数用来为数组赋初值。Test
类包含一个IntArray
类型的成员变量,可以使用构造函数初始化列表对该成员变量进行数组的赋初值。在Test
类的初始化列表中,通过使用{}
来指定初始值的方式,对数组中的4个元素分别赋初值3, 5, 7, 9
。通过类Test
的displayData()
函数,可以输出数组中的元素。
总结
本文详细介绍了C++构造函数初始化列表的实现方法,并通过两个例子来说明了构造函数初始化列表的使用。通过构造函数初始化列表,可以更高效地为成员变量进行初值赋值,提高程序运行效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++构造函数初始化列表的实现详解 - Python技术站