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;
};

  当然,类中普通的成员变量也可以采取此种方式进行初始化,然而,这就没有必要了。

C++子类的构造函数相关推荐

  1. 【Kotlin】Kotlin 类的继承 一 ( 类继承基本方式 | final 关键字 | 子类主构造函数 | 子类次构造函数 )

    文章目录 I . 类继承基本方式 II . 使用 final 禁止类继承 / 方法重写 III . 父类没有主构造函数 IV . 父类有主构造函数 V . 父类构造函数与子类构造函数总结 I . 类继 ...

  2. C++子类父类构造函数的关系

    在C++中子类继承和调用父类的构造函数方法 构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象 ...

  3. c# abstract抽象类与继承类子类的构造函数_base

    http://blog.itpub.net/9240380/viewspace-718054/ http://blog.163.com/cloud_thegreat/blog/static/10367 ...

  4. Java继承子类的构造函数

     每个Java类都必须有构造函数.如果没有显式定义构造函数,Java编译器自动为该类产生一个空的无形参构造函数.如果已经有了显式的有参构造函数,编译器就不会再为它自动产生了. 每个子类的构造函数的第一 ...

  5. 子类的构造函数和析构函数

    1.构造函数是否可以被继承 子类可以继承父类的所有成员变量和成员函数,但不能继承父类的构造函数,因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的额构造函数. 2.父类构造 ...

  6. Cpp 对象模型探索 / 父类和子类调用构造函数和析构函数的顺序

    2018-03-19 创建人:Ruo_Xiao 邮箱:xclsoftware@163.com 一.建立对象过程 father → son 栗子: class Parent {public:Parent ...

  7. 使用“override”声明的成员函数不能重写基类成员_C++日志(三十五)虚基类与其子类的构造函数...

    第三十四篇日志中提到,子类对象调用父类同名的函数时需要使用作用域标识符进行限定,这是在任何继承情况下都可以使用的普适方法. 问题引入: 考虑一种特殊的情况:子类全部或部分的基类(称为中间基类)同是继承 ...

  8. A 子类继承父类,子类的构造函数会覆盖父类的构造函数

    //子类 没有定义 构造 函数时,默认继承父类的构造方法:输出结果为 Class A... // 子类 定义了 构造 函数时,就不会继承父类的构造方法:输出结果是  Class B... <?p ...

  9. php子类没有构造函数父类有构造函数_如何向父类构造函数传递参数,如果父类中存在构造函数并且需要参数,子类在造对象的时候也应该传入相应的参数( )...

    [单选题]六个基本视图的投影规律是"主俯仰后:长对正;( ):高平齐; 俯左仰右:宽相等." [单选题]儿童文学无论是什么文体,都强调什么? [单选题]正在治疗的学生肺结核病患者可 ...

最新文章

  1. win8计算机usb无法识别usb设备,Win8.1无法识别USB设备原因分析及解决办法(适合Win8)...
  2. TCP/IP详解学习笔记-基本概念
  3. shell脚本实现动态时钟
  4. webview取java的参数值_Android 显示 WebView ,加载URL 时,向webview的 header 里面传递参数...
  5. 在Struts结构中,JSP页面的元件命名最好别用大写字母开头
  6. “寒门状元之死”文章引热议 京东徐雷:三流文学作品 多看书吧
  7. 工作难找,朋友却一口气拿了5份大厂offer,他是怎么做到的?
  8. 如何做好一位合格qc_如何成为一名合格优秀的QC,你合格吗?
  9. 编程之美第一篇 01分数规划
  10. 综合能源管理服务认证是什么?综合能源管理服务认证含哪些专业?综合能源服务认证流程
  11. HTML 标签参考手册 - 功能排序
  12. 一小时教会你用JAVA制作超级玛丽小游戏
  13. Kotlin细节十五:作用域函数与 this it 关键字
  14. 九八寒露——HRBUST OJ 1269 小把戏
  15. 学习笔记(01):Java小白修炼手册-工欲善其事必先利其器,掌握Java开发工具
  16. 移动Web开发基础-Viewport
  17. 最新复刻李峋爱心表白HTML源代码+超唯美
  18. imooc《Python入门与实战》学习总结(七)Python中的面向对象
  19. 前端背景粒子线条效果
  20. 个人信息保护相关的重要法规及规范性文件汇总目录

热门文章

  1. python中日期和时间格式化输出的方法
  2. 解决p4c安装时protobuf未定义引用的错误
  3. 通过配置文件添加MIME类型
  4. jave 逻辑运算 vs 位运算 + Python 逻辑运算 vs 位运算
  5. 自写小函数处理 javascript 0.3*0.2 浮点类型相乘问题
  6. 【软件工程实践 · 团队项目】 第一次作业
  7. Unit04 - 继承的意义(下) 、 访问控制 、 static和final
  8. vs2008编写第一个Windows程序
  9. Linux之export命令
  10. 自学笔记 - 购物篮关联分析-两两相关