Day1 命名规范 静态函数 构造析构 指针引用

代码规范

命名

  • 文件命名 小写字母 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引用后得到引用对象大小
  • 类的作为参数传递时,一般情况下使用的时引用
  • 不存在指向空值的引用,存在指向空值的指针
  • 将指针作为形参传递时本质是将实参拷贝给形参,两者指向的地址相同,但不是用同一个变量,在函数之中改变这个变量的指向不会影响实参,但是引用会
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值