1.复制构造函数和赋值操作符

在编写良好类的习惯文中知道了什么时候需要编写自己的复制构造函数、赋值操作符、析构函数后,当基类中需要这几个的时候,派生类当中就应该显式调用基类的复制构造函数和赋值操作符。如下:

A(const A& s){a = s.a;std::cout<<"Has create A"<<std::endl;}///B中的构造函数就应该这样(假设B继承于A):B(const B &v):A(v)
{b = v.b;
}

值得一提的是 A(v)编译器会进行类类型转换;

还有:不能写成这样:

B(const B &v)
{A(v);
           b = v.b;
}

这样编译器会提示 形参v重定义了;至于原因我大概测试了一下,应该是在构造B的时候,编译器会调用A的默认构造函数,然后再{}进行A的又一次构造,所以出现了重定义。

这里要区分初始化列表跟构造函数{}里面操作意义是不一样的。

赋值操作符也一样这样做:

B& B::operator=(const B& b)
{if(this!=&b){A::operator=(b);...................
     }
}

2.析构函数

在继承层次当中,基类中就必须编写虚析构函数,原因很简单:

当静态指针类型跟动态指针类型不一样(要区分理解指针的静态类型跟动态类型):

//B继承于A
A *pa = new A;
delete pa;
pa = new B;//pa的动态类型发生改变
delete pa;

假如没有定义虚析构函数,编译器总是以静态对象类型来调用析构函数,然后再调用上一层次的析构函数,比如当静态类型是B类对象时候,编译器会先析构B类型对象b的,然后自动调用A的析构函数。但假如静态类型跟动态指针类型不一样,如上,且我们没有写虚析构函数,delete pa的时候总是只调用A的析构函数。现在明白为什么必须要为基类写虚析构函数了吧。

3.继承中的重载

继承关系中,重载函数只能发生于同一个层次中,也就是说假如基类跟派生类中出现函数名字一样,但函数原型不一样的时候,两者不构成函数关系,反而当派生类对象中是调用不了基类中的同名函数,也就是说屏蔽了基类对象中的那个同名函数。

知道继承关系中的函数名字查找就可以了理解了,查找一个函数名字,先从静态对象类型的层次中查找,没有再往基类方向查找。

转载于:https://www.cnblogs.com/charm/archive/2010/08/01/1789729.html

继承中的复制构造、赋值、析构、重载相关推荐

  1. 复合继承关系下的构造和析构

    继承关系下的构造和析构 看一下测试代码: /** @filename: Inheritance.cpp* @author: Tanswer* @date: 2018年01月31日 14:59:28* ...

  2. c++面向对象高级编程 学习十五 组合继承关系下的构造和析构

    文章目录 继承关系 组合关系 继承和组合 继承关系 构造由内而外,析构由外而内,内即是父类 组合关系 A拥有B, 构造由内而外,析构由外而内,内即是B 继承和组合 构造和析构顺序如图:

  3. 继承关系中的拷贝构造函数和赋值操作重载函数分析

    文章目录 1 继承关系中的拷贝构造函数和赋值操作重载函数分析 1 继承关系中的拷贝构造函数和赋值操作重载函数分析 在继承关系中,如果子类未实现拷贝构造函数,那么在子类进行拷贝构造操作时,会直接调用父类 ...

  4. C++继承中的构造与析构

    文章目录 1 C++继承中的构造 1.1 子类对象初始化父类成员的方式 1.2 子类对象的构造 2 C++继承中的析构 2.1 子类对象的析构 1 C++继承中的构造 1.1 子类对象初始化父类成员的 ...

  5. c++继承中的构造和析构

    c++继承中的构造和析构 类型兼容性原则 类型兼容规则中所指的替代包括以下情况: 继承中的对象模型 继承中构造和析构 继承中的构造析构调用原则 继承与组合混搭情况下,构造和析构调用原则 继承中的同名成 ...

  6. 【C++深度剖析教程25】继承中的构造与析构

    今天来学习C++中继承的构造与析构,有兴趣一起学习的加qq:1126137994 1.问题 如何初始化父类成员?父类构造函数与子类构造函数有什么关系? 子类对象是如何构造的? 子类中可以定义构造函数 ...

  7. C++继承机制(二)——继承中的构造和析构顺序、继承同名成员的处理方式

    目录: C++继承机制(一)--基本语法.三种继承方式.继承哪些数据 C++继承机制(二)--继承中的构造和析构顺序.继承同名成员的处理方式 C++继承机制(三)--多继承.菱形继承.虚继承原理 本篇 ...

  8. C++继承中构造和析构顺序

    C++继承中构造和析构顺序 继承中构造和析构顺序 问题:父类和子类的构造和析构顺序是谁先谁后? 示例 继承中构造和析构顺序 子类继承父类后,当创建子类对象,也会调用父类的构造函数 问题:父类和子类的构 ...

  9. 继承中构造和析构顺序

    1.子类继承父类后,当创建子类对象,也会调用父类的构造函数 2.继承中先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反 #include<iostream> using name ...

最新文章

  1. 对Thrift的一点点理解
  2. 怎么发表论文能保证被收录
  3. Java 反射 不定参数bug
  4. 【bzoj3575】 Hnoi2014—道路堵塞
  5. python开发个人博客_手把手教你用 Python + Flask 搭建个人博客
  6. 从头编写 asp.net core 2.0 web api 基础框架 (1)
  7. Alibaba Druid连接池接入
  8. 排序字段设计_内容搜索排序表达式的最佳实践
  9. 【Tomcat】Tomcat下设置项目为默认项目
  10. file owner
  11. DataGridView拖动换行
  12. 初学java网络编程的一些总结
  13. redis-(error) CLUSTERDOWN Hash slot not served
  14. 区块链专题报告:区块链是计算机板块上行的催化剂
  15. android 双向加密算法,Android编程加密算法小结(AES、Base64、RAS加密算法)
  16. 版本 87.0.4280.66_iOS 14.2 Beta 2发布,修复闪退与优化改进
  17. 六、MySQL 数据库练习题1(包含前5章练习题目及答案)
  18. 【往届EI已检索】2023年第三届应用数学、建模与智能计算国际研讨会(CAMMIC2023)
  19. nodejs websocket 实现简易聊天室功能
  20. 温度传感器的c语言程序,DS18B20数字温度传感器C语言程序实例

热门文章

  1. Android疯狂ListView之旅 第一季 《侧滑删除条目》
  2. Android 中activity中传递数据的方式
  3. FLL - C++与VFP 双向混合编程
  4. Oracle 数据库和监听器开机自启动两种实现方法
  5. .NET中如何深度判断2个对象相等
  6. 动态BGP和静态BGP的含义与区别
  7. js添加广告模块,随页面移动而移动
  8. java中import机制(指定import和import *的区别)
  9. jQuery控件简易日历表格
  10. 栈-----括号匹配+表达式计算