类型转换

  • 公有派生类对象可以被当做基类的对象使用,反之则不可。

    • 派生类的对象可以隐含转换为基类对象;

    • 派生类的对象可以初始化基类的引用;

    • 派生类的指针可以隐含转换为基类的指针。

  • 通过基类对象名、指针只能使用从基类继承的成员。

类型转换规则举例

以上结果是均调用base1的display()函数

不要重新定义继承而来的非虚函数

派生类的构造函数

默认情况下

  • 基类的构造函数不被继承;

  • 派生类需要定义自己的构造函数

C++规定

  • 可以用using语句继承基类构造函数;

  • 但是只能初始化从基类继承的成员。

  • 语法形式:

    • using B::B

若不继承基类的构造函数

  • 派生类新增成员:派生类定义构造函数初始化;

  • 继承来的成员:自动调用基类构造函数进行初始化;

  • 派生类的构造函数需要给基类的构造函数传递参数。

单继承时构造函数的定义语法:

  • 派生类名::派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表),本类成员初始化列表

{

//其他初始化;

};

#include<iostream>using namespace std;class B{private:int b;public:B();B(int i);~B();void print() const;};B::B(){b = 0;cout<<"B的默认构造函数"<<endl;}B::B(int i){b = i;cout<<"B的带参数构造函数"<<endl;}B::~B(){cout<<"B的析构函数"<<endl;}void B::print() const{cout<<b<<endl;}class C:public B{private:int c;public:C();C(int i,int j);~C();void const print();};C::C(){c = 0;cout<<"C的默认构造函数"<<endl;}C::C(int i,int j):B(i){c = j;cout<<"C的带参构造函数"<<endl;}C::~C(){cout<<"C的析构函数"<<endl;}void const C::print(){B::print();cout<<c<<endl;}int main(){C obj(5,6);obj.print();return 0;}B的带参数构造函数C的带参构造函数56C的析构函数B的析构函数

C++中派生类的构造函数相关推荐

  1. C++中基类与派生类的构造函数和析构函数

    1.Cpp中的基类与派生类的构造函数 基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和 ...

  2. 基类成员的public访问权限在派生类中变为_C++ 派生类的构造函数(学习笔记:第7章 06)...

    派生类的构造函数[1] 默认情况 基类的构造函数不被继承; 派生类需要定义自己的构造函数. C++11规定 可用using语句继承基类构造函数. 但是只能初始化从基类继承的成员. 派生类新增成员可以通 ...

  3. C++中派生类隐式调用与显式调用基类的构造函数

    通过派生类的构造函数调用基类的构造函数有两种方式,隐式和显式两种. 所谓隐式方式就是在派生类的构造函数中不指定对应的基类的构造函数,这个时候调用的是基类的默认构造函数(即含有默认参数值或不带参数的构造 ...

  4. c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]

    说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...

  5. 【C++ Primer 第15章】定义派生类拷贝构造函数、赋值运算符

    学习资料 • 派生类的赋值运算符/赋值构造函数也必须处理它的基类成员的赋值 • C++ 基类构造函数带参数的继承方式及派生类的初始化 定义拷贝构造函数 [注意]对派生类进行拷贝构造时,如果想让基类的成 ...

  6. C++基类和派生类的构造函数(二)

    基类构造函数调用规则 事实上,通过派生类创建对象时必须要调用基类的构造函数,这是语法规定.换句话说,定义派生类构造函数时最好指明基类构造函数:如果不指明,就调用基类的默认构造函数(不带参数的构造函数) ...

  7. C++基类和派生类的构造函数(一)

    前面我们说基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成 ...

  8. php 派生类 构造,C++派生类的构造函数和析构函数

    派生类对象中包含基类对象,因此派生类对象在创建时,除了要调用自身的构造函数进行初始化外,还要调用基类的构造函数初始化其包含的基类对象.因此,程序中任何能够生成派生类对象的语句,都要说明其包含的基类对象 ...

  9. C++ 基类和派生类的构造函数

    在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数完成,但是大部分基类都有 private 属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化. 解决办法: ...

  10. C++派生类的构造函数和析构函数

    C++派生类的构造函数和析构函数 派生类的构造函数和析构函数 #include <iostream> using namespace std; class student { public ...

最新文章

  1. OKR和KPI有什么区别?
  2. 图解第一个Matlab仿真实例
  3. 检测是否输入字母c语言程序,C语言判断字符是否为可打印字符的方法
  4. react-native 开发小结(Android)
  5. 流式计算框架Storm网站访问来源实时统计及存储到redis代码示例
  6. 使用 Log4Net 记录日志
  7. 【英语学习】【WOTD】incipient 释义/词源/示例
  8. Spring boot Mybatis 整合(完整版)
  9. mysql 备库同步_MYSQL主从库同步配置过程
  10. 软件系统设计基本原则
  11. 谷歌邮箱lmap服务器填什么_GMAIL邮箱IMAP设置
  12. ABOV(12) UART
  13. 中文常用停用词表(哈工大停用词表、百度停用词表
  14. 华为也无奈,P20pro降到历史新低价,老用户:买太早
  15. 移动端安卓开发学习记录--Android Studio使用adb链接夜神模拟器常用指令
  16. oracle asm 缺省用户,oracle asm自动存储使用及管理说明(下)
  17. 人工智能要学习哪些数学知识?
  18. 如何一招永久删除hao123流氓网页挟持
  19. 选课系统(面向对象的编程方法)
  20. 计算机的分类及未来发展趋势,计算机的特点、分类及发展趋势

热门文章

  1. Black-White-Blocks
  2. layer.open()利用代码实现伪阻塞
  3. LinkedHashMap 底层分析
  4. 公司内网机器vm ubuntu proxy 设置
  5. linux学习: sudo命令(ubuntu)
  6. JavaScript基础---语言基础(4)
  7. 知识图谱嵌入的一点小事 - ICLR2021
  8. 算法岗面试整理 | 腾讯、字节、美团、阿里
  9. 【NLP入门】手把手带你CNN文本分类(附代码)
  10. 【python】59个Python使用技巧,从此你的Python与众不同(一)