学习笔记_007

来源:互联网 发布:html label js 编辑:程序博客网 时间:2024/06/14 17:21
  • 基本类型可以使用一个或多个类型修饰符进行修饰:

    1. signed
    2. unsigned
    3. short
    4. Long
  • endl在每一行后插入一个换行符

enum 枚举名{
       标识符[=整型常数],
       标识符[=整型常数],
       …
       标识符[=整型常数]
} 枚举变量;

  • 默认情况下,第一个名称的值为 0,第二个为 1,第三个为 2,以此类推,每个名称都比它前面一个名称的值大 1

  • 可以在 C++ 程序中多次声明一个变量,但该变量只能在某个文件、函数或代码块中被定义一次

    // 变量声明    extern int a, b;    extern int c;    extern float f;    int main ()    {      // 变量定义      int a, b;      int c;      float f;      // 实际初始化      a = 10;      b = 20;      c = a + b;    }
  • 局部变量被定义时,系统不会对其进行初始化,须自行对其进行初始化。定义全局变量时,系统会自动为其初始化

  • 在 C++ 中,有两种简单的定义常量的方式:

    1. 使用 #define 预处理器
    2. 使用 const 关键字
  • 修饰符 signed、unsigned、long 和 short 可应用于整型

  • signed 和 unsigned 可应用于字符型
  • long 可应用于双精度型
  • 修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀

  • C++ 允许使用速记符号来声明无符号短整数或无符号长整数。可以不写 int,只写单词 unsigned、short 或 unsigned、long,int 是隐含的

    unsigned x;
    unsigned int y;

  • C++ 程序中的存储类:

    auto
    register
    static
    extern
    mutable
    thread_local (C++11)

  • 使用 thread_local 说明符声明的变量仅可在当前线程上访问。 变量在线程创建时创建,在线程销毁时销毁

  • 从 C++ 11 开始,auto 关键字不再是 C++ 存储类说明符,register 关键字被弃用

  • 定义一个函数,可以为参数列表中的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。

  • Lambda函数语法:

    capture mutable ->return-type{statement}

    1. [capture]:捕捉列表,[] 是 lambda 引出符
    2. (parameters):参数列表。如不需要参数传递,则可以连同括号 () 一起省略
    3. mutable:lambda 函数总是一个 const 函数,mutable可以取消其常量性。使用该修饰符时,参数列表不可省略
    4. ->return_type:不需要返回值时可以连同符号 ->一起省略。在返回类型明确的情况下,也可省略该部分,让编译器自行推导
    5. {statement}:函数体
    6. C++ 中最简单的 lambda 函数只需声明为: []{};
  • C++ 提供了两种字符串表示形式:

    C 风格字符串
    C++ 引入的 string 类类型

  • 引用与指针有三个主要的不同:

    1. 不存在空引用
    2. 一旦引用被初始化为一个对象,就不能被指向到另一个对象;指针可以在任何时候指向另一个对象。
    3. 引用必须在创建时被初始化;指针可以在任何时间被初始化
  • 试想变量名称是变量附属在内存位置中的标签,可以把引用当成是变量附属在内存位置中的第二个标签

    例如:
    int i = 17;
    为 i 声明引用变量:
    int &r = i;

  • 类的析构函数是一种特殊的成员函数,它会在每次删除所创建的对象时执行。
    析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序前释放资源。

  • 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。

  • 重载运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成。与其他函数一样,重载运算符有一个返回类型和一个参数列表。

  • 虚函数是在基类中使用关键字 virtual 声明的函数

  • 如果类中至少有一个函数被声明为纯虚函数,这个类就是抽象类。抽象类不能被实例化,只能作为接口使用。纯虚函数是通过在声明中使用 “= 0” 来指定的:

class Box{   public:      // 纯虚函数      virtual double getVolume() = 0;   private:      double length;      // 长度      double breadth;     // 宽度      double height;      // 高度};
  • 命名空间的定义使用关键字 namespace,后跟命名空间的名称:

    namespace namespace_name {
           // 代码声明
    }

  • 为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称:
    name::code; // code 可以是变量或函数

  • 可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称

  • 构造函数后加冒号是初始化表达式:
    有四种情况下应该使用初始化表达式来初始化成员:

    1. 初始化const成员
    2. 初始化引用成员
    3. 当调用基类的构造函数,而它拥有一组参数时
    4. 当调用成员类的构造函数,而它拥有一组参数时
  • 引用其实就是 c++ 中的常量指针。表达式int &i = j将会被编译器转化成 int *const i = &j

  • 引用之所以要初始化是因为 const 类型变量必须初始化
  • c++ 标准并没有规定编译器如何实现引用。所以实现取决于编译器,而大多数情况下就是将其实现为一个 const 指针
  • 类在定义和声明时,结尾必须加分号是C++的强制规定,如果丢失就会编译报错。分号是告诉编译器,这个声明到此为止,没有后面的变量名了。

  • 在C++中,除函数及预编译指令外,其它的语句或代码段结尾都必须要加分号