继承的构造函数

在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://不会改变继承的构造函数的访问级别,仍然是public
     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;
}
posted @ 2018-02-10 12:09  ,,,沙子,,,  阅读(230)  评论(0)    收藏  举报
编辑推荐:
· 复杂业务系统线上问题排查过程
· 通过抓包,深入揭秘MCP协议底层通信
· 记一次.NET MAUI项目中绑定Android库实现硬件控制的开发经历
· 糊涂啊!这个需求居然没想到用时间轮来解决
· 浅谈为什么我讨厌分布式事务
阅读排行:
· 那些年我们一起追过的Java技术,现在真的别再追了!
· 还在手写JSON调教大模型?.NET 9有新玩法
· 为大模型 MCP Code Interpreter 而生:C# Runner 开源发布
· 面试时该如何做好自我介绍呢?附带介绍样板示例!!!
· JavaScript 编年史:探索前端界巨变的幕后推手
点击右上角即可分享
微信分享提示