C++知识点小结(二)

名字空间
  把全局的命名空间进行分割,可以创建一个个独立的命名空间防止相互之间的冲突
  C语言中的空间划分
    全局、局部、块
  定义名字空间的方式
    namespace name
    {
    }
  名字空间的合并
    同名的名字空间会自动合并
    在同一个名字空间中的标识符必须是唯一的
  定义与声明分开
    即在名字空间中声明函数
    namespace name
    {
      void func(void);
      int num;
    }
    void name::func(void)
    {
    }
  使用名字空间中的内容
    作用域限定符(::)
      在引用处 name::num
      在全局 using namespace name;
      在全局 using name::num;
  名字空间的嵌套
    namespace n1
    {
      int num;
      namespace n2
      {
        int num;
      }
    }
    嵌套中标识符可以重定义,使用时根据需要逐层解析
  全局空间归属为匿名空间
    在全局定义的标识符都属于这个匿名空间,匿名空间默认开放
    如果函数中有同名的标识符把匿名空间中的屏蔽了,可以使用空的空间名加域限定符表示
    不同命名空间中的同名函数不构成重载,同一作用域下的不同参数的同名函数叫重载
class
  C++的 class 与 struct 一样,是一种复合数据类型
  里面可以有变量来表达属性,函数用来表示行为
  在C++的 class 与 struct,几乎没有任何区别
  struct 中默认的访问属性是 public,class 中默认的访问属性是 private
  在C++默认使用 class,以示与C语言中的 class 进行区分
  构造函数
    在创建对象时,自动调用的函数,在整个对象生命周期中,一定会被且只能被调用一次
    在构造函数中,负责对成员变量的初始化、分配资源、设置对象的初始状态
    构造函数可以有多个版本,这些不同的版本之间会构造重载,创建对象时的方式不同,给的参数不同,会调用相应的构造函数
    如果类中没有定义构造函数,编译器会自动生成一个无参构造函数
      一旦定义了其他版本的构造函数,无参构造就不会生成,因此为了防止无参方式创建对象出错,在定义构造函数时,至少要实现两个
    无参构造未必无参,C++函数中可以有默认参数,如果有参构造全部设置了默认参数,就会和无参构造出现冲突,它们两个只能有一个存在
    "编译器生成的XX函数"
      不是真正意义上的函数,只是编译器作为指令的生成者,只要生成具有某些函数功能的指令即可,没有必须生成高级语言的语义上的函数
    调用无参构造
      Student stu <=> Student *stup = new Student;
      创建对象数组,每个对象都会调用一次无参函数
      如果类A中有成员类B,当执行类B的构造函数前会自动调用类B的无参构造
      在类A中调用类B
      类A(参数列表):成员类B(参数列表)
      {
        ...
      }
    类型转换构造函数
      用一个数据给对象初始化,默认会自动调用构造函数,达到类型转换的效果
      使用方便,但会包容一些错误的存在,可以使用 explicit 禁止隐式转换的方式调用构造函数
    默认实现自动类型转换构造函数

猜你喜欢

转载自www.cnblogs.com/wannabeajoker/p/9489211.html