继承的构造函数

Posted SHAZI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承的构造函数相关的知识,希望对你有一定的参考价值。

在C++11新标准中,派生类能够重用其直接基类的构造函数

#include <iostream>
using namespace std;

struct Base
{
    Base() { cout << "construct" << endl; }
};
struct Derived : public Base
{
    using Base::Base; //继承Base的构造函数
};

int main()
{
    Derived d;
    return 0;
}

一个构造函数的声明不会改变该函数的访问级别

#include <iostream>
using namespace std;

struct Base
{
    Base() { cout << "construct" << endl; }
};
struct Derived : public Base
{
   private://不会改变继承的构造函数的访问级别,仍然是publiic
     using Base::Base; 
};

int main()
{
    Derived d;
    return 0;
}

当一个基类的构造函数含有默认实参,这些实参并不会被继承。相反,派生类将获得多个继承的构造函数

#include <iostream>
using namespace std;

struct Base
{
    Base(int x=1) { cout << "construct" <<x<< endl; }
};
struct Derived : public Base
{
    //实际上继承了2个构造函数
     using Base::Base; 
};

int main()
{
    Derived d;
    Derived d1(2);
    return 0;
}

如果派生类定义的构造函数与基类的构造函数有相同的参数列表,该构造函数不会被继承

#include <iostream>
using namespace std;

struct Base
{
    Base() { cout << "construct" << endl; }
    Base(int) { cout << "construct int" << endl; }
};
struct Derived : public Base
{

    using Base::Base;
    //不会继承Base的默认构造函数
    Derived() { cout << "Derived class construct" << endl; };
};

int main()
{
    Derived d;
    Derived d(1);
    return 0;
}

以上是关于继承的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

关于继承中静态代码块,构造代码块,构造函数执行顺序

C++提高:继承

C++提高:继承

什么是构造函数继承?

js组合继承(原型继承+借用构造函数继承)