C++子类父类构造函数的关系
在C++中子类继承和调用父类的构造函数方法
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。
如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。
构造原则如下:
1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。
2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。
3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。
4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。
5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。
6. 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式,比如:
#include <iostream.h>
class animal
{
public:
animal(int height, int weight)
{
cout<<"animal construct"<<endl;
}
…
};
class fish:public animal
{
public:
fish():animal(400,300)
{
cout<<"fish construct"<<endl;
}
…
};
void main()
{
fish fh;
}
在fish类的构造函数后,加一个冒号(:),然后加上父类的带参数的构造函数。这样,在子类的构造函数被调用时,系统就会去调用父类的带参数的构造函数去构造对象。这种初始化方式,还常用来对类中的常量(const)成员进行初始化,如下面的代码所示:
class point
{
public:
point():x(0),y(0)
private:
const int x;
const int y;
};
当然,类中普通的成员变量也可以采取此种方式进行初始化,然而,这就没有必要了。
转载于:https://www.cnblogs.com/oneway1990/p/8468658.html
C++子类父类构造函数的关系相关推荐
- C#学习笔记:子类于父类的构造函数的关系【By Myself】
我们在C#中可以通过base关键字来实现在子类中调用父类的构造函数,以防在父类中有构造函数时在子类重写相同功能的代码: [这里本菜吐槽一下:C#只能继承一个父类是真的难受,可能是本菜理解C#不深入,但 ...
- 类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类
常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式 ...
- python 父类构造函数,python 对于子类构造函数重写父类构造函数的了解
1.对子类实例化的时候,子类的构造函数会覆盖父类的构造函数.super()相当于父类,所以在子类的构造函数中执行super(),就相当于执行了父类的构造函数 class Parent: def __i ...
- Cpp 对象模型探索 / 父类和子类调用构造函数和析构函数的顺序
2018-03-19 创建人:Ruo_Xiao 邮箱:xclsoftware@163.com 一.建立对象过程 father → son 栗子: class Parent {public:Parent ...
- Java基础:子类与父类、子类与对象的关系、子类与父类同包时、不同包时的继承性
继承:是一种由已有的类创建新类的机制. 1.利用继承这个机制,可以先定义一个共有属性的一般类,根据这个类再分别定义具有特殊属性的子类,子类继承了一般类的属性和方法,并根据自己的需求创建新的属性和方法: ...
- Java继承时构造函数的关系
Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...
- 【Kotlin】Kotlin 类的继承 一 ( 类继承基本方式 | final 关键字 | 子类主构造函数 | 子类次构造函数 )
文章目录 I . 类继承基本方式 II . 使用 final 禁止类继承 / 方法重写 III . 父类没有主构造函数 IV . 父类有主构造函数 V . 父类构造函数与子类构造函数总结 I . 类继 ...
- 23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数...
上章链接: 22.C++- 继承与组合,protected访问级别 继承方式 继承方式位于定义子类的":"后面,比如: class Line : public Object // ...
- c# abstract抽象类与继承类子类的构造函数_base
http://blog.itpub.net/9240380/viewspace-718054/ http://blog.163.com/cloud_thegreat/blog/static/10367 ...
最新文章
- 排列组合中分组(分堆)与分配问题
- angular react_Angular 2 vs React:将会有鲜血
- java.lang.classnotfoundexception解决方法
- CAN总线很难吗?CAN总线看不懂是不可能的!
- leaf 叶子(张量)
- Jersey中ContainerRequestFilter的使用
- .net 中debug 微软内部代码
- Flink 原理与实现:理解 Flink 中的计算资源
- mariadb mysql 5.7_MariaDB 10.1 和 MySQL 5.7 在普通商用硬件上的表现
- bzoj 3385: [Usaco2004 Nov]Lake Counting 数池塘(DFS)
- sql 2005性能调优
- App Thinning(为什么苹果app上传时的包比在appStore下载下来的包大很多)
- Html Table 表格 画斜线
- 100部伴随我们长大的电影
- 计算机色温调整,如何调节计算机屏幕的色温
- 国家开放大学:直播为远程教学插上腾飞的翅膀
- Mybatis 时间日期格式转换
- HTML+CSS实现静态注册页面
- 基于Linux的NAS IO优化-以Padavan为例 [SAMBA+VSFTP+ARIA]
- Java添加图片的悬浮提示,DIV+CSS鼠标经过悬停在图片上方显示图片文字
热门文章
- 【CyberSecurityLearning 35】基础环境搭建
- android.support.v7.app.ActionBarActivity
- Spring Session 的两种刷新模式-RedisFlushMode
- apt-get无法下载,一些网址Not Found 404
- 【译】Privacy on the Blockchain
- 【译】Understanding Universal Composition Framework and Sprites State Channels
- 【David Silver强化学习公开课】-6:Value Function Approximation
- Android6.0源码分析—— Zygote进程分析(补充)
- Head First FILE Stream Pointer Overflow
- ARM64的启动过程之(一):内核第一个脚印