类与结构体

出于统一编程风格考虑,当我们希望定义的类的所有成员是public时,使用struct,如果希望成员是private的,使用class。

:::tips 使用class和struct定义类的唯一的区别就是默认的访问权限。 :::

自定义一个类型成员

静态成员

友元(friend)

类允许其他类或者函数访问它的非公有成员。

内联成员函数

构造函数(constructor)

它的任务:初始化类对象的数据成员。

注意事项:

  • 构造函数没有返回类型,且函数名必须与类名相同
  • 支持重载

默认构造函数(default constructor)

不含任何形参的构造函数。

:::tips 只有当类没有声明任何构造函数时,编译器菜会自动地生成默认构造函数。 :::

  1. #include <iostream>
  2. using namespace std;
  3. class Clock {
  4. public:
  5. void set_time(const unsigned default_h,
  6. const unsigned default_m,
  7. const unsigned default_s)
  8. {
  9. h = default_h;
  10. m = default_m;
  11. s = default_s;
  12. };
  13. void show_time()
  14. {
  15. cout << "H:" << h << endl;
  16. cout << "M:" << m << endl;
  17. cout << "S:" << s << endl;
  18. };
  19. //Clock() = default;
  20. //重写默认构造函数
  21. Clock() :h(0), m(0), s(0)
  22. {
  23. };
  24. //构造函数
  25. Clock(const unsigned default_h,
  26. const unsigned default_m,
  27. const unsigned default_s)
  28. {
  29. h = default_h;
  30. m = default_m;
  31. s = default_s;
  32. };
  33. private:
  34. unsigned h, m, s;
  35. };
  1. #include "Clock.cpp"
  2. int main()
  3. {
  4. //方法一:调用了默认构造函数
  5. Clock c;
  6. c.show_time();
  7. //方法二:调用类的成员函数
  8. c.set_time(9, 10, 29);
  9. c.show_time();
  10. //方法三:构造函数
  11. Clock c2(12, 12, 12);
  12. c2.show_time();
  13. }

合成默认构造函数

对于没有显式地定义任何构造函数的类,编译器为其创建(合成)默认构造函数。
该构造函数检查类的数据成员,如果提供了类的初始值,就用它执行初始化操作;否则就对数据成员执行默认初始化。

委托构造函数(delegating constructor)

c+11新标准,它把它自己的一些(或者全部)职责委托给了其他构造函数)

复制构造函数

其他函数事项

在类的外部定义构造函数

this

常量成员函数(const member function)

this指针是指向常量的指针,通过区分函数是否是const可以进行重载。

const的作用是修改隐式this指针的类型。

应用场景

一个类中的get函数(类似java中的getter和setter函数)

  1. // 读取类的私有成员变量
  2. Cpu_rank getRank() const
  3. {
  4. return rank;
  5. }
  6. unsigned getFrequency() const
  7. {
  8. return frequency;
  9. }

析构函数

实例化对象的生命周期?

枚举类