C++使用类的一些注意事项
前言:
本篇内容为前面的补充,介绍了我们使用类时需要注意些什么以及一些编译器的优化,可能有些理解不到位或者错误,请斧正。
目录
前言:
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
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。