C++面向对象高级编程 第四周 博览网

  • 转换函数
    转换函数无参数,不用写返回类型(但必须有返回值)。
    例如operator double () const {...}
  • 在构造函数前加explicit 关键字可以阻止编译器隐式调用构造函数将其他类型变为构造类型。
  • point-like classes
    有智能指针和迭代器(一直特殊的智能指针)两种用法。
    智能指针需要重载* (直接 return *sp) ->(直接return sp)两个操作符,其中->操作符作用后会继续传递下去。
    迭代器除了需要重载* -> 之外还需要重载== != ++(后置,无参数) ++(前置 有一个参数) --
1.png
2.png
  • function-like classes
    重载operator()的一种类
  • 使用namespace
    namespace std {..}命名空间std 内容全部写在括号内。
  • 函数参数列表中一个是传值,一个是传引用不构成函数的重载。返回值不同也不构成函数的重载。一个函数是否是常量函数也构成函数的重载。
  • 常量指针: const int* p1; 此处的const修饰的是*,即表示指针p1指向的是一个常量。
    指针常量: int x; int* const p2 = &x; 此处的const修饰的是p2,即p2是常量,一个指向int型的指针常量,(常量在定义的时候必须被赋值).此指针不可以被重新赋值.数组名其实就相当于一个指针常量,因此数组名不可以被重新赋值。 引用类型也可以看成是一种指针常量,因其声明时必须被初始化,且不可改变其指向的对象。
    特殊情况: int i; int const * pi = &x; 此处说明pi指向的位置中所存的内容不能通过修改*pi的方式来改变.
    对于指针常量和常量指针的口诀:对于const和* 两个字符,在前先读(分别读成指针常量,常量指针),在前不变(const在*号表示指针所指的数据不变,const在变量名前表示指针为常量)。
    指向常量的指针常量 const char * const a;
  • C++动态分配内存 内存状态图(complex类包含两个double成员变量)(string中包含一个char指针)(左边为debugger模式,右边为release模式)
3.png
  • (32位系统中)对于类成员如果时空类占1个字节,如果有虚函数,每个虚函数会有一个vptr指针占4个字节,如果有静态类成员变量,其在global date memory中,在类实例化中不单独占用内存。类的成员函数不占用类的大小。
    类在内存中占用的空间与成员变量的顺序也有关系。同时遵循数据对齐原则。

推荐阅读更多精彩内容