0
点赞
收藏
分享

微信扫一扫

C++ 委托构造与继承构造

这是一篇关于讲解关于委托构造与继承构造使用的问题

1.委托构造的含义

委托构造一般指在一个类中,使用该类的另一个构造函数来协助当前构造函数完成构造
````c++
#include <iostream>

class student{
public:
explicit student(){
std::cout<<"student 构造函数"<<std::endl;
mAge = 18;
}
explicit student(int xAge,std::string xName)
:mAge(xAge),mName(xName){

}
explicit student(std::string xName)
    :student(18,xName){

}
/*********错误示范******************
explicit student(std::string xName)
    :student(),mName(xName){

}
***********************************/
auto getAge()->int{
    return mAge;
}

private:
int mAge;
std::string mName;
};

int main()
{
student Stu("whfan");
std::cout<<Stu.getAge()<<std::endl;
return 0;
}

> \- [ ]**c++语法规定:委托构造函数的初始化必需单独出现,因此例中出现的错误示范是不被允许的**
## 2.继承构造的含义
> 继承构造一般用在存在有继承关系,且子类无超出父类的需要初始化的资源的情况下,多使用继承构造,继承构造简化了子类的构造函数的编写
````c++
#include <iostream>
class Parent{
public:
    explicit Parent(){}
    explicit Parent(int xAge,std::string xName)
        :mAge(xAge),mName(xName){
        std::cout<<"Parent 构造函数"<<std::endl;
    }
    ~Parent(){
        std::cout<<"Parent 析构函数"<<std::endl;
    }
    virtual void Work(){
        std::cout<<"always Work"<<std::endl;
    }
public:
    int mAge;
    std::string mName;

};

class Son:public Parent{
public:
    //继承构造
    using Parent::Parent;       //使用父类的构造函数
    /****************若不使用继承构造,则需要这样写**********************
    explicit Son(int xAge,std::string xName)
        :Parent(xAge,xName){

    }
    ********************************************************************/
    ~Son(){
        std::cout<<"Son 析构函数"<<std::endl;
    }
    void play(){
        std::cout<<"always play No study"<<std::endl;
    }
};

int main()
{
    Son s(18,"whfan");
    std::cout<<s.mAge<<std::endl;
    return 0;
}

- [] 委托构造与继承构造的出现,主要是方便了构造函数的编写,在多构造函数和复杂构造函数中使用较多

举报

相关推荐

0 条评论