第十二章:类和动态内存分配

来源:互联网 发布:单片机湿度传感器 编辑:程序博客网 时间:2024/06/04 18:37

静态变量的使用

  1. 类中的静态变量不属于任何对象,是共享变量
  2. 在类的方法实现的文件中初期化类的静态变量。
  3. 不能在类声明中初期化静态成员变量。
    static int a = 0; //wrong
    static const int a = 0; //right
  4. static const修饰的类成员可以进行初期化。因为const变量的初期化只执行一次。
    int StringBad::num_strings = 0;

带参数的有默认值的构造函数可以作为默认构造函数。

复制构造函数:

  1. 声明和使用
    className(const className &);
    String(const String &);
    String st1(st2);
    String st1=st2;
    String st1 = String(st2);
    String *pst = new String(st1);
  2. 当按值传递和返回对象时,都会调用复制构造函数。
  3. 有时可选用传递参数的引用

如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,实现深拷贝。

赋值运算符的重载:

  1. 定义和使用
    String & String::operator=(const String &);
    String st1;
    String st2;
    st1 = st2;
  2. 赋值运算符只能由类成员函数重载
  3. 赋值操作并不产生一个新的对象。

C语言的空指针:宏NULL
C++的空指针:nullptr

静态类成员函数

  1. 静态类成员函数,函数前使用static修饰
  2. 不能通过对象调用静态类成员函数
  3. 如果静态类成员函数是公有的,使用类名::函数名调用
  4. 静态成员函数不能访问非静态数据成员

类的数据成员使用了new:

  1. 多个构造函数中使用new的格式都相同,因为只有一个析构函数。
    如果构造函数中使用new,析构函数要使用delete
  2. 应定义一个复制构造函数
  3. 应重载赋值运算符

有关返回对象的说明:

  1. 返回指向const对象的引用
    • 返回对象将调用复制构造函数,返回引用不会
    • 引用指向的对象应在调用函数执行时存在
  2. 返回指向非const对象的引用
    • 重载<<必须返回非const ostream对象的引用,因为如果返回对象的话,ostream类没有公有的复制构造函数。
      3.返回对象
    • 不能是局部变量
      4.返回const对象

什么情况下会调用析构函数?

  1. 动态变量,在执行完定义该对象的程序块时,调用该对象的析构函数。
  2. 静态变量,在程序结束时调用
    3.new创建的,调用delete删除时才会调用

显式调用析构函数的顺序和new的顺序相反

重载<<运算符
ostream & operator<<(ostream &os, const class_name &obj) {
os << …
return os;
}
设置为友元函数。

转换函数

  1. 其他类型转换为类类型:class_name(type_name value);
  2. 类类型转换为其他类型:operator type_name();
  3. 转换函数不能有返回类型
阅读全文
0 0
原创粉丝点击