C++`构造函数 `头文件`等

来源:互联网 发布:泰迪网络用语 编辑:程序博客网 时间:2024/06/16 17:25
:::C++类A的构造函数初始化
A::A:x(0){}
1.初始化列表会把类对象里全部数据成员都初始化一遍,然后再在{}函数体里面改变初始值
2。所以最好写在:后面的初始化列表里,避免做同样的事情两次。
3.初始化是按定义时的顺序执行的
4.类里的内部类型数据成员如果在局部内定义对象将会被缺省初始化,如int a,这些将用内存本身的值,所以构造函数都应该提供内部类型的数据成员初始值;


:::C++头文件
1C++的头文件根据最小影响原则,不要使用using声明,而用例如std::vecotr,这样被#include进去不会影响到源代码
2.把类的定义,函数的声明,内联函数的定义等放在 XX.h中,把类的实现代码,函数的实现代码都放在XX.cpp中
3.XX.cpp应该要包含进xx.h,这样可以对比声明和定义有没错,但是因为函数重载的关系,编译器检测这种声明和定义是否一致的能力是有限的,不会完全检测
4.头文件为了避免重复定义一般要用如
#ifndef GUARD_XX
defien GUARD_XX
//内容
#endif
这样可以保护重复定义,因为定义只能用一次,声明可以多次。



:::c++杂
1.全部容器都应该用size_type来声明容器长度类型,对于数组,应该用size_t,定义在include<cstddef>里面 ,数组指针的差值用ptrdiff_t类型

2.把成员函数声明为const是很重要的,如果该函数没有改变对象的数据成员,那么一定要声明为const函数,在声明和定义时都要写出const

3.根据操作的对象是不是常量  也就是最后的也只有最后的那个const可以来重载,如果对象是const对象,那么他调用的成员函数必须全部都是后面带有const的成员函数
4.复制构造函数和赋值操作符不同,赋值总是把一个已经存在的值擦去,而复制构造函数是先创建,不用擦去.
5.“=”这个符号用在为变量赋初始值时调用复制构造函数,而在表达式用调用operator=。
6.new:C++的new出了分配新的空间,还要求对内存进行初始化,在为类型为T的数组分配空间时,T必须要有默认构造函数,不然会出错。new的自动初始化浪费资源,因为自己赋值的话就等于初始化了两次。
7.自动转换类型:编译器默认提供类的operator=的参数是(const X &) ,和赋值构造函数的参数也是(const X &),在我们写X s="hello";时,调用的是参数为(const X &)的复制构造函数,由于提供的参数是const char *,和需要的const X &不匹配,所以如果我们自己定义一个参数为 const char *的构造函数的时候就能自动转换类型。
8.实现+运算符之前先实现+=运算符会方便很多
9.explicit不让隐式转换,一般定义会被转换构造的构造函数都先写上explicit,当确实要隐式转换构造的时候再擦去explicit
10.Accelerated C++这本书讲句柄类设计的时候的设计改进步骤是四种类型的,逐步改进。
第一,先直接用类指针实现多态
第二,换成把指针和借口封装在一个类
第三,换成通用句柄类替代类指针
最后,换成把通用句柄类放在接口类里面,让接口类成为一个纯接口类,又能实现多态

0 0
原创粉丝点击