类的基础语法

1. 构造函数

  • 单参数构造函数,需要加explicit, 避免隐式转换
explicit person_t(const std::string& wname):_id(count++),_name(wname) {} explicit worker_t(const std::string &name):person_t(name),_wage(0), _level(0) {}

  • 初始化列表
    1. 初始化列表可以用来对于 const object member进行初始化
    2. 可以初始化 base class
worker_t():person_t(),_wage(0), _level(0) {}

  • 无参构造函数的调用
person_t p //正确 person_t p() // 错误, 函数声明

2. 拷贝构造函数
  • 拷贝构造函数也可以有初始化列表
  • 拷贝构造函数声明如下
person_t(const person_t& other_worker);

  • 如果不需要拷贝构造函数,需要将拷贝构造函数声明为private
3. 赋值函数
  • 赋值函数声明如下
person_t& operator=(const person_t& other_worker);

  • 如果不需要赋值函数,则需要将赋值函数声明为private
4. 析构函数
  • 如果类中包含virtual 声明,则虚函数最好被声明为virtual
  • 析构函数不能抛出异常,必须处理所有异常
5. override
  • 子类重写父类的函数
6. virtual
  • 子类重写父类函数
    virtual void info() {
    std::cout << "this is person" << std::endl;
    }
  • 则运行时多态,如果指针指向父类实例,则调用父类的实现,如果指针指向子类实例,则调用子类的实现
person_t *ptr1 = new worker_t("ptr1"); //调用worker_t 类的info ptr1->info(); delete ptr1; person_t *ptr2 = new person_t("ptr2"); //调用person_t类的info ptr2->info(); delete ptr2;

7. overload
  • 重载指同名函数的不同实现,重载可以因为参数的个数不同, 也可以使参数的类型不同
  • 重载不可以仅仅返回值不同的情况
8. 对象成员
  • const object member, const 成员正在在初始化列表中进行初始化
  • non const object member
9. 类成员 【类的基础语法】类所有的对象共享此变量,如下实例中的ct
class person_t { public: static uint64_t ct; }

    推荐阅读