行业知识
C++使用类的一些注意事项
2026-11-10 03:33:43
来源:互联网转载
前言:
本篇内容为前面的补充,介绍了我们使用类时需要注意些什么以及一些编译器的优化,可能有些理解不到位或者错误,请斧正。
目录
前言:
1.再谈构造函数
2.(c++98)隐式类型转换中的编译器的优化
3.explicit关键字
4.static成员
5.匿名对象
6.友元函数
7.内部类
8.编译器的一些场上的优化
总结:
若有歧义,请指出,感谢阅读!
1.再谈构造函数
我们在构造函数体中,给成员变量赋值能叫做成员变量的初始化吗?并不可以,这种行为只是给成员变量赋初值,在函数体中,我们可以多次赋值,而初始化只能初始化一次。
那该如何初始化呢?
使用初始化列表。以一个冒号开始,接着是一个以逗号分割的数据成员列表,每个成员变量的后面跟一个放在括号中的初始值表达式。
class Date{public:Date(int year, int month, int day):_year(year),_month(month),_day(day){}private:int _year;int _month;int _day;}; 那像const这样的必须在定义位置的初始化的,放在成员变量里面该怎么初始化呢?
可以给缺省值,但不是初始化:
class A{public:A():_x(1){_a1++;}private:int _a1 = 1;int _a2 = 2;const int _x;//可以给缺省值,但不是初始化}; 另外,缺省值也会在初始化列表进行初始化:
如上图我们可以看到, _a1的结果是2,虽然没有在初始化列表中显示的初始化,但是还是会走初始化列表初始化;其次_a2的结果是0,虽然_a2的缺省值是2,但是在初始化列表中显示的初始化为了1,所以再--就是0。而对于即不给缺省值也不给初始化的普通成员变量,经过测试,那就是随机值。
对于成员变量是引用的与成员变量是自定义类型的:
class B{public:B(int b):_b(0){cout