【2015.08.10】C++学习笔记

跟随MMOC重新学习c艹时,发现不少知识漏洞。
现将重要点和知识漏洞记录

##C++ 基础##

  1. 根据C++标准规定,main()返回int,可以不显式return也能够通过编译(但不推荐,不是好习惯)
  2. (规范)定义常量使用const关键字而不是宏
  3. (规范)不要使用TAB字符缩进,用空格代替(因TAB在不同编辑器中显示宽度不同)
  4. (规范)NULL是C语言规范,c++中应使用0,c++11可以用nullptr
  5. 输出\n与使用endl操纵符执行的效果相同,但程序的流程和原理不同
  6. 重载函数(overload functions)的匹配由 数量、类型、顺序决定
  7. 含默认值的参数必须后置,且不能同时写在函数声明与定义中。
  8. C语言一定要在函数开头定义变量,而c++可在函数体任意位置定义

命名规范##

  1. (规范)函数命名,单词首字母大写(但首单词除外),如saveAccount
  2. (规范)变量命名,大小写混杂,必须由小写开头,如savingAccount
  3. (规范)类型命名,单词首字母大写(包括首单词),如Line
  4. (规范)常量命名,字母全部大写,用下划线_分隔单词,如MAX_NUM
  5. (规范)bool变量/函数命名,is开头(有时可用更好的前缀替换is,如has,should),且避免出现否定词 isEmpty,hasData
  6. (规范)namespace命名,字母全部小写,如common::account::manager
  7. (规范)template命名,单一大写字母,如Fuck
  8. (规范)类的private成员命名,以_结尾或开头。
  9. (规范)访问全局变量使用::操作符,如::globalVar
  10. (规范)通用变量命名与类型名相同,如void setTopic(Topic* topic)

##C++ 类基础##

  1. (规范)自定义class,单词大写(标准库是小写)
  2. Typename()可以创建匿名对象
  3. 面向对象特征包括 *抽象(Abstraction)多态(Polymorphism)继承(Inheritance)封装(Encapsulation)*,速记:A PIE
  4. C++的结构化数据类型包括array、class
  5. 对象是 class 的实例(instance)。
  6. 对象由 唯一的标识(a unique identity)、状态(state)、行为(behaviors) 构成。
  7. 一般情况下,我们在 .h 文件中声明类, 在.cpp 文件中定义类的成员函数。
  8. getter/setter应该声明为public
  9. 内联(inline)函数以空间换时间,声明inline是对编译器的请求而不是命令。
  10. 在类声明中写函数体默认声明方法为inline。
     //A::f() is inline 
     class A {
         f() { }
     };
     
     //A::f() is inline 
     inline A::f() { }
     
     //A::f() isn't inline 
     class A {
          f(); 
     };
     A::f(){}
     
     //A::f() is inline 
     class A {
         inline f();
         };
     A::f(){}

类的初始化

  1. class数据域 在 构造函数体执行前便已初始化完毕,编译器默认调用class的无参构造函数,由初始化列表可以替代默认初始化操作。
  2. 没有默认构造函数的class类型成员 必须由初始化列表初始化,否则将导致编译器的默认初始化行为报错。
  3. 常量成员 必须由初始化列表初始化,因常量必须初始化,而编译器不会对常量进行默认初始化行为。
  4. 引用成员 必须由初始化列表初始化,因引用必须初始化,而编译器不会对引用进行默认初始化行为。
  5. 指针成员 不是必须由初始化列表初始化,其值可以是任意的。

不可变类

  1. 一个类成为 不可变类(immutable class) 的充分必要条件是 所有数据域均设置为private、没有更改器(setter)、没有能够返回可变数据域对象的引用或指针的访问器(accessor)
  2. 不可变类的内容在初始化后不是一定不变的
  3. 不可变类是线程安全的(thread-safe)

静态类成员

  1. 类中的静态成员变量可以在类的构造函数中初始化。
  2. C语言中的static函数只能在被定义的文件中使用(但可以include 该文件来调用)
  3. 类的静态数据成员的存在不依赖于任何类对象的存在,可以通过 类名或者对象名来访问。

类的友元

  1. 友元函数和友元class可以直接访问class的private成员
  2. public下使用friend关键字声明友元函数friend void freindFunction();或友元类friend class freindClass;

..一晚上日了网易课堂4个多单元,大概一个月的课程了吧==

注:标记为(规范)的不是强制性要求,仅为养成良好编程习惯。
只要你的行为可以增强程序可读性,便于维护,或者有很强的个人理由,可以不遵守规范

##参考资料##

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信