博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++】继承时构造函数和析构函数
阅读量:4518 次
发布时间:2019-06-08

本文共 1426 字,大约阅读时间需要 4 分钟。

1. 顺序

  先调用基类的构造函数,再调用派生类构造函数。析构顺序相反。

2. 构造函数

  派生类 不用初始化列表调用基类构造函数->调用基类的默认构造函数

  派生类 使用初始化列表调用基类带参构造函数->调用基类相关的带参构造函数

  若派生类有多个构造函数版本,其中任意一个基类的构造函数不匹配,都会出错。

3. 复制构造函数

  派生类 未定义复制构造函数 ->调用基类的复制构造函数(如果有)或默认复制构造函数,和派生类的默认复制构造函数

  派生类 定义了复制构造函数  未使用初始化列表调用基类复制构造函数 -> 调用基类默认构造函数

      派生类 定义了复制构造函数  使用初始化列表调用基类复制构造函数 -> 调用基类复制构造函数(如果有)或默认复制构造函数

 

例子:

#include
using namespace std;class A{public: A() { cout << "A 默认构造函数" << endl; } A(int i) { cout << "A A(int i)构造函数" << endl; } ~A() { cout << "A 析构函数" << endl; } A(const A & obj) { cout << "A 复制构造函数" << endl; }};class B : public A{public: B() { cout << "B 默认构造函数" << endl; } B(int j):A(j) { cout << "B B(int j):A(j)" << endl; } ~B() { cout << "B 析构函数" << endl; } B(const B & obj) //调用A的默认构造函数 { cout << "B 复制构造函数" << endl; } //B(const B & obj):A() //调用A的默认构造函数 //{ // cout << "B 复制构造函数" << endl; //} //B(const B & obj):A(obj) //调用A的复制构造函数 //{ // cout << "B 复制构造函数" << endl; //}};int main(){ { cout << "----------------------" << endl; B b; cout << "----------------------" << endl; B b1(3); cout << "----------------------" << endl; B b2(b); cout << "----------------------" << endl; } return 0;}

转载于:https://www.cnblogs.com/dplearning/p/4785346.html

你可能感兴趣的文章
项目重构
查看>>
iOS 开发 证书总结 开发证书和生产证书的区别
查看>>
(笔试题)和一半的组合数
查看>>
leetcode--Algorithm--Array_Part 1 Easy- 566 Reshape the Matrix
查看>>
AC自动机算法详解 (转载)
查看>>
python3-day5(模块)
查看>>
Linux配置JDK
查看>>
qt 读取xml文件
查看>>
python3之正则表达式
查看>>
Visual Studio提示“无法启动IIS Express Web服务器”的解决方法
查看>>
Java 时间总结
查看>>
JavaScript 累加求和练习
查看>>
jQuery EasyUI 拖放 – 基本的拖动和放置
查看>>
计算累进税类问题
查看>>
ThinkInJava之内部类
查看>>
licode学习之erizo篇--WebrtcConnection
查看>>
动态规划——背包问题汇总
查看>>
iOS 日历提醒 (类似天猫淘宝的 利用代码添加事件到系统日历中)
查看>>
福大软工1816 · 第一次作业 - 准备
查看>>
[原创]浅谈移动互联网创业公司工具类产品
查看>>