
在前文基础上,我们继续深入 C++ 类的高级特性。这部分内容涵盖了构造函数的初始化细节、类型转换机制、静态成员管理、友元权限控制以及对象生命周期优化。掌握这些知识点,能让你的面向对象设计更加稳健高效。
一、再谈构造函数
构造函数负责对象的初始化。每次实例化时它都会自动调用。除了基础用法,这里有一些高级技巧值得注意。
1.1 初始化方式的选择
给成员变量赋值主要有两种方式:构造函数体内赋值和初始化列表。
传统方式是在函数体内直接赋值:
class Person {
public:
Person(int age) { _age = age; }
private:
int _age;
};
这种方式虽然直观,但效率稍低。因为成员变量会先经历默认初始化,再在函数体内被赋值,相当于做了两次操作。
推荐使用初始化列表。语法上在参数列表后加冒号 :,直接在创建阶段完成初始化:
class Person {
public:
Person(int age) : _age(age) {}
private:
int _age;
};
这样能避免不必要的默认初始化开销,性能更好。
1.2 必须使用初始化列表的场景
有些情况初始化列表是唯一选择,否则编译会报错:
- 引用成员变量:引用必须在定义时绑定,不能后续赋值。
- 常量成员变量:
const成员一旦初始化就不能修改。 - 无默认构造函数的类类型成员:如果成员是另一个类且该类没有默认构造函数,必须显式初始化。
示例如下:
class Date {
public:
Date(int& year, int month = 1, int day = 1)
: _year(year), _month(month), _day(day), _constValue(100) {}
private:
& _year;
_constValue;
_month;
_day;
};



