C++子类的构造函数
子类的构造函数
- 子类可以有自己的构造函数
- 子类没有构造函数,默认系统会调用父类的构造函数
- 子类有自己的构造函数,系统会先运行父类的构造函数,随后运行子类的构造函数,对子类对象进行覆盖和拓展
- 即不论子类有没有构造函数,创建子类对象时,父类构造函数都将被调用
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++子类的构造函数的更多相关文章
- c# abstract抽象类与继承类子类的构造函数_base
http://blog.itpub.net/9240380/viewspace-718054/ http://blog.163.com/cloud_thegreat/blog/static/10367 ...
- C++子类父类构造函数的关系
在C++中子类继承和调用父类的构造函数方法 构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象 ...
- 子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是
按照先后顺序: 1,静态先于非静态代码库执行(静态代码块随着类的加载而加载,初始化只执行一次) 2,父类先于子类 3,非静态代码块优于构造函数执行 所以执行顺序如下: 父类B静态代码块->子类A ...
- [Effective JavaScript 笔记]第38条:在子类的构造函数中调用父类的构造函数
示例 场景类 场景图(scene)是在可视化的过程中(如游戏或图形仿真场景)描述一个场景的对象集合.一个简单的场景包含了在该场景中的所有对象(称角色),以及所有角色的预加载图像数据集,还包含一个底层图 ...
- Python,JAVA中子类的构造函数与父类构造函数的关系
Python: 子类不重载.覆盖父类的构造函数(子类不自己定义构造函数),则构造子类时会调用父类构造函数 若子类覆盖了父类的构造函数,则构造子类时不执行父类的构造函数,但仍继承了父类,如需调用父类构造 ...
- C++子类的构造函数后面加:冒号的作用(转)
在C++类的构造函数中经常会看到如下格式的写法: MyWindow::MyWindow(QWidget* parent , Qt::WindowFlags flag) : QMainWindow(pa ...
- Java: 基类、子类、构造函数、程序块的初始化顺序
初始化顺序 基类static block 子类static block 基类non-static block 子类non-static block 基类constructor 子类constructo ...
- Effective JavaScript Item 38 调用父类的构造函数在子类的构造函数
作为这一系列Effective JavaScript的读书笔记. 在一个游戏或者图形模拟的应用中.都会有场景(Scene)这一概念.在一个场景中会包括一个对象集合,这些对象被称为角色(Actor). ...
- 在C++中子类继承和调用父类的构造函数方法
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需 ...
- java子类和父类中静态块、非静态块、构造函数的执行顺序
public class qqqq extends Parent{ public static void main(String[] args) { new Child(); } } class Pa ...
随机推荐
- python 高级函数补充
补充几个高级函数 zip 把两个可迭代内容生成一个可迭代的tuple元素类型组成的内容 # zip 案例 l1 = [ 1,2,3,4,5] l2 = [11,22,33,44,55] z = zip ...
- 性能_1 Jmeter脚本编写
一.万能法 先把项目启动 打开项目接口文档,接口文档: 一般是开发 特别注意事项:当你的接口请求参数为json格式时,一定要写请求头,请求头中一定要有 Content-Type: applicatio ...
- Redis分布式锁实现及使用
文章目录 分布式锁 全局ID生成器 一人一单实现 超卖问题 一人一单 分布式锁 Redis setnx实现分布式锁 Redis在业内解决秒杀等业务场景有非常广的应用,如何设计实现一个分布式锁是解决超卖 ...
- java优先队列PriorityQueue
文章目录 前言 PriorityQueue 优先队列 java中优先队列的声明 按优先级排序 常见方法 private void grow(int minCapacity) public boolea ...
- 关于ObservableCollection的更新与不更新分析
因为最近在WPF项目中,遇到ObservableCollection这个属性的频繁使用,一个一个坑跳过来,今天看到这个贴子 玩转INotifyPropertyChanged和ObservableCol ...
- 2023-04-14:n对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手, 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的ID, 情侣们按顺序编号,第一对
2023-04-14:n对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手, 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的ID, 情侣们按顺序编号,第一对 ...
- 2022-10-08:以下go语言代码输出什么?A、0 0;B、0 4;C:4 0;D:4 4。 package main const s = “Go101.org“ // len(s) == 9
2022-10-08:以下go语言代码输出什么?A.0 0:B.0 4:C:4 0:D:4 4. package main const s = "Go101.org" // len ...
- 2022-09-06:以下go语言代码输出什么?A:Hi All;B:Hi go All;C:Hi;D:go All。 package main import “fmt“ func app() f
2022-09-06:以下go语言代码输出什么?A:Hi All:B:Hi go All:C:Hi:D:go All. package main import "fmt" func ...
- 2020-12-09:TCP中,慢启动是什么?
福哥答案2020-12-09: 简单回答:乘法增大. 中级回答:cwnd拥塞窗口.rwnd接收窗口.MSS最大报文段长度.ssthresh慢开始门限.使用慢开始算法后,每经过一个传输轮次(即往返时延R ...
- linux LVM和磁盘配额
目录 一.LVM原理 二.LVM的命令 三.创建lvm过程 四.扩容 五.磁盘配额 一.LVM原理 lvm是逻辑卷管理,可以让用户动态管理磁盘,不用考虑物理磁盘的问题,可以快速扩充磁盘大小,可以不用一 ...