美文网首页
类的基础语法

类的基础语法

作者: ld9183 | 来源:发表于2019-02-01 12:21 被阅读0次

    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;
    }
    

    相关文章

      网友评论

          本文标题:类的基础语法

          本文链接:https://www.haomeiwen.com/subject/utklsqtx.html