子类创建对象时调用父类的构造函数:

 1 #include <iostream>
2 using namespace std;
3 class Base
4 {
5 public:
6 Base():m_num(0){
7 cout<<"this is Base()"<<endl;
8 }
9 Base(int val):m_num(val){
10 cout<<"this is Base(int val)"<<endl;
11 }
12 private:
13 int m_num;
14 };
15
16 class BaseChild:public Base
17 {
18 public:
19 BaseChild(){
20 cout<<"this is BaseChild()"<<endl;
21 }
22 BaseChild(int val):Base(val){
23 cout<<"this is BaseChild(val)"<<endl;
24 }
25 };
26
27 int main(int argc,char *argv[])
28 {
29 BaseChild child1;
30 BaseChild child2(5);
31 return 0;
32 }

父类的构造函数无法继承,故必须在子类构造函数初始化列表中引用,否则将调用父类的默认构造函数

构造函数中有默认参数时:

 1 #include <iostream>
2 using namespace std;
3 class Base
4 {
5 public:
6 Base(int val):m_num(val){
7 cout<<"this is Base(int val)"<<endl;
8 }
9 private:
10 int m_num;
11 };
12
13 class BaseChild:public Base
14 {
15 public:
16 BaseChild(int val=14):Base(val){
17 cout<<"this is BaseChild(val)"<<endl;
18 }
19 };
20
21 int main(int argc,char *argv[])
22 {
23 BaseChild child1;
24 return 0;
25 }

注意,如果子类构造函数中没有默认参数,就会报错,因为父类、子类中都没有定义无参数的构造函数;而若父类、子类加上无参数的构造函数后,也会报错,因为会产生二义性问题,编译器不知道用户想调用哪个构造函数

参考:

c++构造函数初始化类对象

https://blog.csdn.net/weixin_43891901/article/details/89227108

c++子类构造函数初始化

https://www.cnblogs.com/clovershell/p/10246629.html

c++二义性问题

https://www.cnblogs.com/heimianshusheng/p/4836282.html

[c++] 子类构造函数中有默认参数的更多相关文章

  1. C++:构造函数的默认参数知识拓展

    和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值.   例9.3的问题也可以使用包含默认参数的构造函数来处理.   [例9 ...

  2. C++构造函数重载以及默认参数引起的二义性

    大家都知道当我们声明一个类时,系统会提供一个默认构造函数.当我们需要提供参数进行对类数据成员进行初始化时,就需要对类的带参构造函数进行重载.同时,如果我们需要调用默认构造函数进行类数据成员的初始化时, ...

  3. 2.9 C++使用默认参数的构造函数

    总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常 ...

  4. C++使用默认参数的构造函数

    我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常老的书,为了尽快清空库存,店主想了一下,决定开展一个大甩卖活动,所有的这些书全部以五美元的价格出售.此时如果需要尽快将这些书的信息录入到书 ...

  5. C++中关于重载默认构造函数与默认全部参数的构造函数的使用注意

    # include<iostream>using namespace std;class Time{public:                            //公用成员函数  ...

  6. C#深入学习笔记 - 可空类型与构造函数默认参数

    在实际开发中或许可能会遇到某个属性需要提供一个默认参数,如果该参数是引用类型的话,可以通过 使用 null 来表示未知的值,但如果是int或 其他值类型的话就有点不好办了,因为如果需要一个int或fl ...

  7. java构造函数是否可继承,以及子类构造函数可否不使用super调用超类构造函数

    问题一:java的构造函数能否被继承? 笔者初学java看的一本书说:“java的子类自然的继承其超类的“非private成员”. 通常java的构造函数被设置为public的(若你不写构造函数,ja ...

  8. C++继承中关于子类构造函数的写法

    构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需 ...

  9. C++中的默认参数规则

    C++中的默认参数规则 C++的默认参数规则其实是一个非常容易掉坑的规则,尤其是当一个函数拥有多个声明的时候,每个声明的默认参数可以各不相同,在调用时又可能与每个声明都不同:这篇博客稍微列举一下C++ ...

随机推荐

  1. ES系列(二):基于多播的集群发现实现原理解析

    ES作用超强悍的搜索引擎,除了需要具有齐全的功能支持,超高的性能,还必须要有任意扩展的能力.一定程度上,它是一个大数据产品.而要做扩展性,集群自然少不了.然而单独的集群又是不够的,能够做的事情太少,所 ...

  2. Spring (三)SpringAoP

    1.Spring 的 AOP 简介 1.1 什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能 ...

  3. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作debian9.6.0-17

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作debian9.6.0-17 欢迎加QQ群:1026880196 进行交流学习   制作Ope ...

  4. MinIO分布式集群的扩展方案及实现

    目录 一.命令行方式扩展 1. MinIO扩展集群支持的命令语法 2. 扩容示例 二.etcd扩展方案 1. 环境变量 2. 运行多个集群 3. 示例 相关链接 MinIO 支持两种扩展方式: 通过修 ...

  5. JVM调试命令简介

    1.JPS(查JAVA进程) 2.jinfo(查看正在运行java应用程序的扩展参数,包括Java System属性和JVM命令行参数:也可以动态的修改正在运行的JVM一些参数) 大部分的运行期参数是 ...

  6. Day16_89_通过反射机制获取所有构造方法

    通过反射机制获取某个特定的构造方法 * 代码 import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; publ ...

  7. 【WPF】将控件事件中的参数,传递到ViewModel中

    在MVVM模式下,在通常使用命令(Command)绑定的方式的时候 ,使用的是 CommandParameter 属性进行参数的传递. 但是很多时候,有一些事件我们需要使用其中的一些事件里面的参数,以 ...

  8. UI自动化测试框架:关键字驱动+数据驱动

    1. 关键字驱动框架简介 2. 工程结构说明 3. 工程代码实现 action 包  page_action.py business_process 包 case_process.py data_so ...

  9. python 函数基本内容

    1.什么是函数? 函数就是盛放代码的容器,把实现某一功能的一组代码丢到一个函数中就做成了一个小工具具备某一功能的工具->函数事先准备工具的过程->函数的定义遇到应用场景拿来就用->函 ...

  10. GridSearchCV 参数

    GridSearchCV(estimator, param_grid, scoring=None, fit_params=None, n_jobs=1, iid=True, refit=True, c ...