子类的构造函数

  • 子类可以有自己的构造函数

    • 子类没有构造函数,默认系统会调用父类的构造函数
    • 子类有自己的构造函数,系统会先运行父类的构造函数,随后运行子类的构造函数,对子类对象进行覆盖和拓展
    • 即不论子类有没有构造函数,创建子类对象时,父类构造函数都将被调用
class student:	//创建student对象,这个将成为父类
{
public:
/*两个成员函数名称相同,但形参类型不同,系统会根据传入参数类型来分别修改对象的年龄和名字,这种现象称为重载*/
bool set(int a); //普通成员函数,修改对象年龄
bool set(string a); //普通成员函数,修改对象名字 /*常成员函数,即一个方法只读取属性,而不修改属性,就是常成员函数,常成员函数使用const修饰,加const只是安全考虑,防止意外修改数据*/
bool read() const; //读取对象属性,返回值为bool类型 /*构造函数,本质上是将对象初始化,构造函数的名字必须和类的名字一样*/
/*不带参数的构造函数,自动初始化对象*/
student(); /*带参数的构造函数,动态初始化对象*/
student(int a, string b);
private:
int age;
string name;
} bool student :: set(int a)
{
age = a;
return true;
} bool student :: set(string a)
{
name = a;
return true;
} bool student :: read() const
{
cout<< age;
cout<< name;
return true;
} student :: student()
{
age =20;
name = "张三";
} student :: student(int a, string b)
{
age = a;
name = b;
}
/*研究生不带参数构造*/
class postgraduate : public student //定义研究生类,表示从student类派生而来
{
public: //研究生公有成员
string research; //这行新增定义了一个公开的属性research,字符串,研究生的方向
postgraduate(); //研究生的无参数构造函数的声明
postgraduate(int a, string b, string c); //研究生的有参数的构造函数的声明,参数为年龄,姓名和研究方向
}
postgraudate :: postgraduate()
{
research = "asic design"; //对研究生的research属性赋值为asic design,注意没有age和name
} //下面是主函数
postgraduate bb ; //创建研究生对象bb,调用无参数构造函数
  • 创建子类bb对象后,系统首先会运行父类student构造函数,对age和name赋值,随后运行子类postgraduate构造函数,对bb对象进行拓展,增加research内容
  • 换句话说,子类是不能继承父类的构造函数的,只能调用父类构造函数
/*带参数的子类构造函数*/
postgraduate :: postgraduate(int a, string b, string c) :student(a,b) //带参数构造函数定义
{
research = c;
} //下面是主函数
postgraduate bb(25,"李四","ASIC design") ; //创建研究生对象bb,传入有参数的构造函数
  • 程序会先调用父类student构造函数,把25和李四两个值传入父类student带参数的构造函数
  • 随后把参数c=asic design传给bb自己的research属性。这样实现了对研究生对象的全动态的初始化赋值。

C++子类的构造函数的更多相关文章

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

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

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

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

  3. 子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是

    按照先后顺序: 1,静态先于非静态代码库执行(静态代码块随着类的加载而加载,初始化只执行一次) 2,父类先于子类 3,非静态代码块优于构造函数执行 所以执行顺序如下: 父类B静态代码块->子类A ...

  4. [Effective JavaScript 笔记]第38条:在子类的构造函数中调用父类的构造函数

    示例 场景类 场景图(scene)是在可视化的过程中(如游戏或图形仿真场景)描述一个场景的对象集合.一个简单的场景包含了在该场景中的所有对象(称角色),以及所有角色的预加载图像数据集,还包含一个底层图 ...

  5. Python,JAVA中子类的构造函数与父类构造函数的关系

    Python: 子类不重载.覆盖父类的构造函数(子类不自己定义构造函数),则构造子类时会调用父类构造函数 若子类覆盖了父类的构造函数,则构造子类时不执行父类的构造函数,但仍继承了父类,如需调用父类构造 ...

  6. C++子类的构造函数后面加:冒号的作用(转)

    在C++类的构造函数中经常会看到如下格式的写法: MyWindow::MyWindow(QWidget* parent , Qt::WindowFlags flag) : QMainWindow(pa ...

  7. Java: 基类、子类、构造函数、程序块的初始化顺序

    初始化顺序 基类static block 子类static block 基类non-static block 子类non-static block 基类constructor 子类constructo ...

  8. Effective JavaScript Item 38 调用父类的构造函数在子类的构造函数

    作为这一系列Effective JavaScript的读书笔记. 在一个游戏或者图形模拟的应用中.都会有场景(Scene)这一概念.在一个场景中会包括一个对象集合,这些对象被称为角色(Actor). ...

  9. 在C++中子类继承和调用父类的构造函数方法

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

  10. java子类和父类中静态块、非静态块、构造函数的执行顺序

    public class qqqq extends Parent{ public static void main(String[] args) { new Child(); } } class Pa ...

随机推荐

  1. 单窗算法的地表温度反演:谷歌地球引擎GEE代码

      本文介绍在GEE中基于Landsat遥感影像实现地表温度(LST)单窗算法反演的代码. 1 背景知识   基于遥感数据的地表温度(LST)反演目前得到了广泛的应用,尤其是面向大尺度.长时间范围的温 ...

  2. flink之Sink to MySQL和Redis

    前言 下面这篇文章是使用Flink的Sink 写出数据到Redis和MySQL Flink之Sink写入Redis和MySQL Flink需要添加Sink的时候,需要自己去添加写Sink,我们可以实现 ...

  3. 如何通过C#/VB.NET代码将PowerPoint转换为HTML

    利用PowerPoint可以很方便的呈现多媒体信息,且信息形式多媒体化,表现力强.但难免在某些情况下我们会需要将PowerPoint转换为HTML格式.因为HTML文档能独立于各种操作系统平台(如Un ...

  4. 2022-09-20:以下go语言代码输出什么?A:8 8;B:8 16;C:16 16;D:16 8。 package main import ( “unsafe“ “fmt“ )

    2022-09-20:以下go语言代码输出什么?A:8 8:B:8 16:C:16 16:D:16 8. package main import ( "unsafe" " ...

  5. 2022-07-28:以下go语言代码输出什么?A:AA;B:AB;C:BA;D:BB。 package main import ( “fmt“ ) func main() { f

    2022-07-28:以下go语言代码输出什么?A:AA:B:AB:C:BA:D:BB. package main import ( "fmt" ) func main() { f ...

  6. 2021-12-10:64位的浮点数和64位的有符号整数,哪个能表示的数据个数多? A.整型多。 B.浮点型多。 C.与平台有关。 D.一样多。 来自qq群。

    2021-12-10:64位的浮点数和64位的有符号整数,哪个能表示的数据个数多? A.整型多. B.浮点型多. C.与平台有关. D.一样多. 来自qq群. 答案2021-12-10: 答案选A. ...

  7. 各类源码下载网址(u-boot,linux,openssl,文件系统)

    一.U-Boot源代码下载 1.U-Boot的官方网站: https://www.denx.de/wiki/U-Boot/http://ftp.denx.de/pub/u-boot/ftp://ftp ...

  8. SICP:元循环求值器(Python实现)

    求值器完整实现代码我已经上传到了GitHub仓库:TinySCM,感兴趣的童鞋可以前往查看.这里顺便强烈推荐UC Berkeley的同名课程CS 61A. 在这个层次结构的最底层是对象语言.对象语言只 ...

  9. GPT大语言模型Alpaca-lora本地化部署实践【大语言模型实践一】

    模型介绍 Alpaca模型是斯坦福大学研发的LLM(Large Language Model,大语言)开源模型,是一个在52K指令上从LLaMA 7B(Meta公司开源的7B)模型微调而来,具有70亿 ...

  10. SpringMVC请求转发和重定向测试

    保存视图解析器的请求转发和重定向测试 1.web.xml模板文件(略) 2.springmvc配置文件 <?xml version="1.0" encoding=" ...