首页 > Note > C++ 构造函数漫谈(四)

C++ 构造函数漫谈(四)

2019年8月21日 发表评论 阅读评论

这一章谈 C++11 中引入的两种 “语法糖” .使用它们可以使得我们的代码更为简洁优雅。

委托构造函数

在同一个类中,一个构造函数可以调用另一个构造函数,这叫委托构造函数。这是 C++ 11 的新特性。
委托构造函数可以简化在每个构造函数中的重复代码。

class B{
public:
    B():x_(0),y_(0),z_(0){
        //Do something
    }
    B(int x): B(){
        x_ = x;
    }

    B(int x, int y): B(x){
        y_ = y;
    }

    void DoSomething(){}
private:
    int x_;
    int y_;
    int z_;
};

注意一点,委托构造函数在使用时不可以形成环:禁止套娃。

继承构造函数

在 C++ 中,子类会隐藏父类的 同名 函数.

class B{
public:
    void Fun(){}
};

class D: public B{
public:
    void Fun(int a){}
};

int main() {
    D d;
    d.Fun(); //ERROR, 找不到合适的函数
    d.B::Fun(); //必须指明
    return 0;
}

在 C++11 中,我们可以使用 using BaseClass::FunName 来继承父类的同名函数。

class B{
public:
    void Fun(){}
    void Fun(char c){}
};

class D: public B{
public:
    using B::Fun;
    void Fun(int a){}
};

int main() {
    D d;
    d.Fun(); //OK
    d.Fun('c'); //OK
    d.Fun(42);
    return 0;
}

这种用法对一个类的构造函数同样适用。

class B{
public:
    B():x_(0),y_(0){}
    B(int x):x_(x),y_(0){}
    B(int x,int y):x_(x),y_(y){}
private:
    int x_;
    int y_;
};

class D: public B{
public:
    using B::B;
    D(int x, int y, int z):B(x,y), z_(z){}
private:
    int z_;
};

int main() {
    D d;
    D d1(1);
    D d2(1,1);
    D d3(1,1,1);
    return 0;
}

 

 

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.