子类的构造函数

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

    • 子类没有构造函数,默认系统会调用父类的构造函数
    • 子类有自己的构造函数,系统会先运行父类的构造函数,随后运行子类的构造函数,对子类对象进行覆盖和拓展
    • 即不论子类有没有构造函数,创建子类对象时,父类构造函数都将被调用
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. 前端 本地缓存localStorage/sessionStorage

    当我们刷新页面时,除了路由,页面的当前状态及数据会全部清空/重置,包括浏览器标题. 如果想保存刷新前的一些数据,可以通过window.localStorage/sessionStorage,在浏览器里 ...

  2. [Pytorch框架] 2.1.4 数据的加载和预处理

    文章目录 PyTorch 基础 :数据的加载和预处理 Dataset Dataloader torchvision 包 torchvision.datasets torchvision.models ...

  3. selenium控制文件下载位置

    selenium控制文件下载位置 我们在自动化下载文件的时候势必存在一种需求: 通过chrome将文件保存到指定位置 1. google窗口实现 ​ 配置'prefs'将文件下载到指定位置, 并通过判 ...

  4. uni-app 运行项目

    运行-运行到浏览器-选择浏览器 运行新项目:真机测试需要打开真机的开发者选项usb安装调试功能

  5. ComboBox1 绑定手动创建的DataTable

    '************************************************** '*过程名称:DT_PAFORMAL '*功能说明:员工类别 '**************** ...

  6. Linux:论如何在虚拟机上挂载多个镜像?

    欢迎来到千汐   博客名称:千秋云染博客网址:https://www.cnblogs.com/skyrainmom 寄语:在混乱不堪的世界里你只管前行,时间替会证明一切 world cookie 我可 ...

  7. 【GiraKoo】could not find UI helper 'git-credential-manager-ui'

    环境 Windows 11 git version 2.39.0.windows.1 TortoiseGit 现象 使用TortoiseGit执行git pull命令时,提示could not fin ...

  8. 【GiraKoo】C++编译中常用的内置宏

    开源项目:https://girakoo.com/ 联系方式:girakoo@163.com 简介 针对不同的平台,很多头文件,函数名称,类型占用空间不一致. 为了保证跨平台可编译,经常需要在项目中使 ...

  9. T-SQL——批量刷新视图

    目录 0. 背景说明 1. 查询出所有使用了指定表的视图并生成刷新语句 2. 创建存储过程批量刷新 3. 刷新全部的视图 4. 参考 shanzm--2023年5月16日 0. 背景说明 为什么要刷新 ...

  10. java解决中文乱码的几种写法

    工作中总会遇到中文乱码问题,以导出文件,文件名称是中文的话,下载下来的文件名称会乱码问题,总结了几种解决文件名乱码的写法,仅供参考. 首先定义一个汉语字符串 String zhName = " ...