C++11中提供的继承构造函数可以让派生类直接使用基类的构造函数,而无需自己再写构造函数,尤其是在基类有很多构造函数的情况下,可以极大地简化派生类构造函数的编写。

先来看没有继承构造函数之前的处理方式:
代码如下:

#include <iostream>
#include <string>
using namespace std;class Base
{public:Base(int i):m_i(i){}Base(int i,double j):m_i(i),m_j(j){}Base(int i,double j,string k):m_i(i),m_j(j),m_k(k){}int m_i;double m_j;string m_k;
};class Child :public Base
{public:Child(int i):Base(i){}Child(int i,double j):Base(i,j){}Child(int i,double j,string k):Base(i,j,k){}};int main()
{Child c(520, 13.14, "I Love You");cout << "int  = " << c.m_i << " double = " << c.m_j << " string  = " << c.m_k << endl;return 0;
}

测试结果:

继承构造函数
代码如下:

#include <iostream>
#include <string>
using namespace std;class Base
{public:Base(int i):m_i(i){}Base(int i,double j):m_i(i),m_j(j){}Base(int i,double j,string k):m_i(i),m_j(j),m_k(k){}int m_i;double m_j;string m_k;
};class Child :public Base
{public:using Base::Base;};int main()
{Child c(520, 13.14, "I Love You");cout << "int  = " << c.m_i << " double = " << c.m_j << " string  = " << c.m_k << endl;return 0;
}

测试结果:

如果子类中有跟父类一样的同名函数,就会隐藏父类的一样同名的函数。

代码如下:

#include <iostream>
#include <string>
using namespace std;class Base
{public:Base(){}Base(int i):m_i(i){}Base(int i,double j):m_i(i),m_j(j){}Base(int i,double j,string k):m_i(i),m_j(j),m_k(k){}void func(int i){cout << "base func(int i)" << endl;}void func(int i, string str){cout << "base func(int i,string str)" << endl;}int m_i;double m_j;string m_k;
};class Child :public Base
{public:using Base::Base;void func(){cout << "child func()" << endl;}};int main()
{Child c;c.func();//c.func(2);//error//c.func(2, "Tom");//errorreturn 0;
}

测试结果:

在子类中加入下面这条代码,则可以解除隐藏。

using Base::func;

代码如下:

#include <iostream>
#include <string>
using namespace std;class Base
{public:Base(){}Base(int i):m_i(i){}Base(int i,double j):m_i(i),m_j(j){}Base(int i,double j,string k):m_i(i),m_j(j),m_k(k){}void func(int i){cout << "base func(int i)" << endl;}void func(int i, string str){cout << "base func(int i,string str)" << endl;}int m_i;double m_j;string m_k;
};class Child :public Base
{public:using Base::Base;using Base::func;void func(){cout << "child func()" << endl;}};int main()
{Child c;c.func();c.func(2);c.func(2, "Tom");return 0;
}

测试结果:

[C++11]继承构造函数相关推荐

  1. C++11 继承构造函数

    1.简介 子类为完成基类初始化,在 C++11 之前,需要在初始化列表调用基类的构造函数,从而完成构造函数的传递.如果基类拥有多个构造函数,那么子类也需要实现多个与基类构造函数对应的构造函数. cla ...

  2. C++11:继承构造函数

    前言 首先我们来看一种情况,有如下示例: class Base {public:Base(int i):x(i),y(0){}Base(int i,double j):x(i),y(j){}Base( ...

  3. C++11之继承构造函数(using 声明)

    系列文章 C++11之正则表达式(regex_match.regex_search.regex_replace) C++11之线程库(Thread.Mutex.atomic.lock_guard.同步 ...

  4. c++11 继承构造

    c++11 继承构造 #define _CRT_SECURE_NO_WARNINGS#include <iostream> #include <string> #include ...

  5. 委托构造函数继承构造函数

    委托构造函数 委托构造函数的引入 小明和李华给外国友人写信从高中写到了考研写累了,突然想唱歌,为了方便这哥俩唱歌,咱写了个唱歌类给他们.这哥俩唱的不好,就限制他俩只能唱三句.因为有1~3句的选择,就写 ...

  6. C++进阶教程 - 委托构造函数和继承构造函数

    委托构造函数 什么是委托构造函数? 委托构造函数是由C++11引入的新概念,是对C++构造函数的改进,允许构造函数使用初始化列表调用同类中的其他构造函数,旨在简化构造函数的书写,提升代码的可维护性,降 ...

  7. C/C++编程:继承构造函数

    引入 在传统C++中,如果派生类要使用使用基类的构造函数,通常需要在构造函数中显式声明: struct A{public:A(int i) {} };struct B : A{B (int i) : ...

  8. C++三大继承构造函数的执行顺序详解

    写的挺好的,关于继承和构造函数的先后顺序问题. 转自: http://blog.csdn.net/daheiantian/archive/2011/02/18/6438782.aspx 一.单继承 核 ...

  9. java中子类继承父类时是否继承构造函数

    java继承中对构造函数是不继承的,只是调用(隐式或显式). 以下是例子: public class FatherClass { public FatherClass() {        Syste ...

最新文章

  1. 正确地启动hadoop
  2. 对比MS Test与NUnit Test框架
  3. android+apk启动过程,Android Apk的运行过程(一)—— Activity启动与页面事件传递...
  4. 【Python】TensorBoard的启动问题
  5. nginx tcp转发_Nginx性能优化技巧
  6. 服务器一直运行python_【已采纳】supervisor在服务器端(linux),如何一直运行你的python代码...
  7. (50)FPGA数组描述(reg型)
  8. C\C++获取当前路径
  9. 获取当前系统在线用户的数量
  10. Avro, Protocol Buffers 、Thrift的联系与区别
  11. Angular服务器端渲染
  12. Linux命令和vim的使用
  13. rlocfind matlab,绘制根轨迹的MATLAB函数介绍
  14. Spring学习笔记(五)--Spring概述
  15. java应用程序由若干个_Java应用程序由若干个类所构成,这些类可以在一个源文件中,也可以分布在若干个源文件中。...
  16. 手脱aspack变形壳
  17. 使用json报错java.lang.NoClassDefFoundError: nu/xom/ParentNode
  18. Golang入门之——文件锁操作flock
  19. android波浪动画简书,Android贝塞尔曲线————波浪效果(大波浪)
  20. 点、线、圆、矩形、抛物线的类定义_德语词汇-数学类

热门文章

  1. React Native之didFocus和didBlur
  2. Android之导入项目提示Android requires compiler compliance level 5.0 or 6.0. Found ‘1.8‘ instead解决办法
  3. Android之使用HandlerThread 以及如何退出总结
  4. Android之百度地图定位最详细使用总结
  5. 我使用 html 反向输出自己打自己(7)
  6. 安川伺服总线通讯方式_MⅢ总线特点 安川伺服选型与应用案例
  7. 软件项目组织管理(二、三)项目管理与信息技术环境、项目管理过程组
  8. 数学,原来可以这么美!
  9. 想象中的同居生活 VS 真实的同居生活
  10. 如何用Python画一个中国地图?