WPS知识点_Day2
代码规范
命名
- 文件命名 小写字母 kctlinechartview.h
- 类命名 前缀+驼峰命名
- struct typedef enum和类的命名原则相同 enum成员采用大写字母开头的驼峰写法
- 变量命名 小写字母开头的驼峰命名
注意:仅仅允许在for循环和表示坐标时使用单字母变量
非static类成员变量前加上m_前缀 static类成员变量前加s_前缀 - 函数 除构造函数和析构函数外,类成员函数使用小写字母开头的驼峰写法。非类成员函数使用大写字母开头
- 全局变量 g_前缀 static全局变量 gs_前缀
- 命名空间 简短的小写单词
头文件
头文件包含顺序
- 预编译头文件 stdafx.h
- 与代码文件同名的头文件
- 系统头文件
- 单位内部头文件
- 工程文件
头文件包含保护
- 所有头文件均使用#ifndef +#define +#endif
- 宏命名方式 PROJECTNAME_FILENAME_H
注释
-文件头 文件名 创建者 创建时间 功能 版权信息
- 默认注释语言为中文
格式
- 函数调用的括号前后之间不加空格,参数之间逗号之后加一个空格
- if、while、for 等关键字与括号之间加一个空格,括号后不加空格
- 二元运算符前后各加一个空格
- 声明指针类型的*号前加一空格,后边不加空格
作用域
- 局部变量应在将要使用时进行声明,声明的同时初始化
- 除非特殊情况,不使用 Class 类型的全局变量,不使用 Class 类型的 static 类数据成员。可以用单例模式替代 Class 类型的全局变量
- 避免使用 using namespace 将一个名称空间中的所有名称全部导入
运算符重载
不可重载的运算符
- 成员访问运算符
- 成员指针访问运算符
- 域运算符 ::
- 条件运算符 ?:
- 预处理符号 #
重载运算符两种定义
普通的非成员函数
Box operator+(const Box&,const Box&);
//t1=operator+(t2,t3)
- 一般来讲,非成员函数应为友元函数,这样才能访问类的私有数据,对于此版本来讲,两个操作数都是作为参数传递
定义为类成员函数
Box operator+(const Box&);//内含有this指针,隐式传递
//t1=t2.operator+(t3)
静态函数
static
- 隐藏 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
- 保持变量内容的持久
- 默认初始化为0(static变量)
- C++中的类成员声明static
类的静态成员函数和非静态成员函数
- 静态的成员函数没有包含this指针,不属于对象,属于类
- 非静态成员函数属于对象,包含this指针
- 非静态成员函数调用时要先创建一个对象
- 一般情况,类的成员函数想作为回调函数来使用时,需要将其定义为静态成员函数
- 静态成员函数不能访问非静态的数据成员,它只能访问静态数据成员,也只能调用其它的静态成员函数。原因:当前对象的地址(this)是被隐含地传递到被调用的函数的。但一个静态成员函数没有this指针,所以它无法访问非静态的成员函数。
构造函数与析构函数
构造函数
默认构造函数
- 当且仅当没有定义任何构造函数时,编译器才会提供默认的构造函数
- 当类有定义的构造函数时,程序员必须为它提供默认的构造函数
- 如果提供了非默认构造函数,未提供默认构造,则有些声明将出错
- 设计类时,通常应该提供对所有类成员做隐式初始化的默认构造
拷贝构造函数
- 在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象
- 如果在类中没有定义拷贝构造函数,编译器会自行定义一个
- 如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数
移动构造函数
- 以移动而非深拷贝的方式初始化含有指针成员的类对象
- 移动语义指的就是将其他对象(通常是临时对象)拥有的内存资源“移为已用
拷贝构造函数和移动构造函数
当类中同时包含拷贝构造函数和移动构造函数时,如果使用临时对象初始化当前类的对象,编译器会优先调用移动构造函数来完成此操作。只有当类中没有合适的移动构造函数时,编译器才会退而求其次,调用拷贝构造函数。
构造函数调用顺序
- 基类构造函数(多个基类,顺序为某类在派生类之中出现的顺序)
- 成员类对象构造函数(多个成员对象,构造顺序为在对象在类中被声明的顺序)
- 派生类构造函数
析构函数
析构函数调用顺序
- 派生类析构函数
- 成员类对象的析构函数
- 基类析构函数
指针和引用区别
- 指针是一个变量存储一个地址,引用时变量的别名
- 指针可以有多级,引用只有一级
- 指针可以为空,引用不能为空且必须被初始化
- 指针在初始化之后可以被改变方向,引用一旦初始化就不可以改变
- sizeof指针得到指针的大小,sizeof引用后得到引用对象大小
- 类的作为参数传递时,一般情况下使用的时引用
- 不存在指向空值的引用,存在指向空值的指针
- 将指针作为形参传递时本质是将实参拷贝给形参,两者指向的地址相同,但不是用同一个变量,在函数之中改变这个变量的指向不会影响实参,但是引用会