[c++] 子类构造函数中有默认参数
子类创建对象时调用父类的构造函数:
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++] 子类构造函数中有默认参数的更多相关文章
- C++:构造函数的默认参数知识拓展
和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值. 例9.3的问题也可以使用包含默认参数的构造函数来处理. [例9 ...
- C++构造函数重载以及默认参数引起的二义性
大家都知道当我们声明一个类时,系统会提供一个默认构造函数.当我们需要提供参数进行对类数据成员进行初始化时,就需要对类的带参构造函数进行重载.同时,如果我们需要调用默认构造函数进行类数据成员的初始化时, ...
- 2.9 C++使用默认参数的构造函数
总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常 ...
- C++使用默认参数的构造函数
我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常老的书,为了尽快清空库存,店主想了一下,决定开展一个大甩卖活动,所有的这些书全部以五美元的价格出售.此时如果需要尽快将这些书的信息录入到书 ...
- C++中关于重载默认构造函数与默认全部参数的构造函数的使用注意
# include<iostream>using namespace std;class Time{public: //公用成员函数 ...
- C#深入学习笔记 - 可空类型与构造函数默认参数
在实际开发中或许可能会遇到某个属性需要提供一个默认参数,如果该参数是引用类型的话,可以通过 使用 null 来表示未知的值,但如果是int或 其他值类型的话就有点不好办了,因为如果需要一个int或fl ...
- java构造函数是否可继承,以及子类构造函数可否不使用super调用超类构造函数
问题一:java的构造函数能否被继承? 笔者初学java看的一本书说:“java的子类自然的继承其超类的“非private成员”. 通常java的构造函数被设置为public的(若你不写构造函数,ja ...
- C++继承中关于子类构造函数的写法
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需 ...
- C++中的默认参数规则
C++中的默认参数规则 C++的默认参数规则其实是一个非常容易掉坑的规则,尤其是当一个函数拥有多个声明的时候,每个声明的默认参数可以各不相同,在调用时又可能与每个声明都不同:这篇博客稍微列举一下C++ ...
随机推荐
- Android学习之在Adapter中调用Fragment
•前言 在学习<第一行代码>,4.5 小节--一个简易版的新闻应用的时候: 在为 RecyclerView 创建适配器的时候: 作者直接在 NewsTitleFragment.java 中 ...
- Android Studio中Switch控件有关 thumb 和 track 用法
•任务 •属性 android:track:底部的图片(灰->绿) android:thumb:设置 Switch 上面滑动的滑块,也就是上图中的白色圆形滑块 •switch_thumb 点击 ...
- 2048小游戏(c++)(转)
下为源码 #include <iostream> #include <windows.h> #include <ctime> using namespace std ...
- 四单元总结&OO总结
目录 本单元架构总结 第一次作业 第二次作业 第三次作业 架构设计总结 第一单元 第二单元 第三单元 对测试演进 课程收获 改进建议 线上学习体验 本单元架构总结 第一次作业 第一次作业按照UML正常 ...
- BUAA_2021_SE_Case_Analysis
案例分析作业 项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业 我在这个课程的目标是 通过课程学习,完成第一个可以称之为"软 ...
- JavaWeb 基础知识补充
软件架构 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端程序,在远程有一个服务器端程序 * 如:QQ,迅雷... ...
- Hadoop完整搭建过程(二):伪分布模式
1 伪分布模式 伪分布模式是运行在单个节点以及多个Java进程上的模式.相比起本地模式,需要进行更多配置文件的设置以及ssh.YARN相关设置. 2 Hadoop配置文件 修改Hadoop安装目录下的 ...
- Puzzle UVA - 227 PE代码求大佬指点
A children's puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 smal ...
- Day13_64_线程的优先级
线程的调度 * 单核CPU在某一时刻只能执行一条指令,线程只有得到CPU的时间片,也就是使用权,才可以执行指令 * 在单核CPU的机器上线程不是并行运行的,而是频繁切换运行的,只有在多个CPU上线程才 ...
- vue 进阶学习(一): vue 框架说明和与其他框架的对比
vue 框架说明和与其他框架的对比 一.说明 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三 ...