广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++继承中的对象构造与析构和赋值重载实例分析
  • 676
分享到

C++继承中的对象构造与析构和赋值重载实例分析

2023-06-29 09:06:18 676人浏览 八月长安
摘要

本文小编为大家详细介绍“c++继承中的对象构造与析构和赋值重载实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++继承中的对象构造与析构和赋值重载实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一

本文小编为大家详细介绍“c++继承中的对象构造与析构和赋值重载实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++继承中的对象构造与析构和赋值重载实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、构造/析构顺序及继承性

class A{private:int _a;public:A(int a = 0): _a(a){cout << "A()" << this << endl;}~A(){cout << "~A()"<< this <<endl;}};class B : public A{private:int _b;public:B(int b): _b(b), A(){cout << "B()" << this << endl;}~B(){cout << "~B()"<< this <<endl;}};

C++继承中的对象构造与析构和赋值重载实例分析

结论:

构造顺序:先构造基类,后构造派生类

析构顺序:先析构派生类,后析构基类

二、拷贝构造的继承性

class A{private:int _a;public:A(int a = 0): _a(a){cout << "A()" << this << endl;}A(const A& src): _a(src._a){cout << "A(const A& src)"<< this << endl;}~A(){cout << "~A()"<< this <<endl;}};class B : public A{private:int _b;public:B(int b): _b(b), A(){cout << "B()" << this << endl;}B(const B& src): _b(src._b){cout << "B(const B& src)" << this << endl;}~B(){cout << "~B()"<< this <<endl;}};

C++继承中的对象构造与析构和赋值重载实例分析

结论:

先调用基类缺省的构造函数,后调用派生类的拷贝构造函数

若派生类没有缺省构造函数A(),就会报错

疑惑:如何去调用基类的拷贝构造而不是缺省构造

#include<iOStream>using namespace std;class A{private:int _a;public:A(int a = 0) : _a(a){cout << "A()" << this << endl;}A(const A& src) : _a(src._a){cout << "A(const A& src)" << this << endl;}~A(){cout << "~A()" << this << endl;}};class B : public A{private:int _b;public:B(int b) : _b(b), A(){cout << "B()" << this << endl;}B(const B& src) : _b(src._b), A(src)//发生赋值兼容规则(切片){cout << "B(const B& src)" << this << endl;}~B(){cout << "~B()" << this << endl;}};int main(){B b(10);B b1(b);return 0;}

C++继承中的对象构造与析构和赋值重载实例分析

结果:

将B类型src传递给A类型的A(const A& src)拷贝构造函数,发生了赋值兼容规则(切片现象)

三、赋值重载不具有继承性

#include<iostream>using namespace std;class A{private:int _a;public:A(int a = 0) : _a(a){cout << "A()" << this << endl;}A(const A& src) : _a(src._a){cout << "A(const A& src)" << this << endl;}A& operator=(const A& src){if(this != &src){_a = src._a;cout << "A& operator=(const A& src)" << endl;}}~A(){cout << "~A()" << this << endl;}};class B : public A{private:int _b;public:B(int b) : _b(b), A(){cout << "B()" << this << endl;}B(const B& src) : _b(src._b), A(src)//发生赋值兼容规则(切片){cout << "B(const B& src)" << this << endl;}B& operator=(const B& src){if(this != &src){_b = src._b;cout << "B& operator=(const B& src)" <<  endl;}}~B(){cout << "~B()" << this << endl;}};int main(){B b1(10);B b2(20);b1 = b2;return 0;}

C++继承中的对象构造与析构和赋值重载实例分析

结论:默认情况下仅仅调用了派生类的对象的赋值重载,并未调用基类的赋值重载。

解决方案:

#include<iostream>using namespace std;class A{private:int _a;public:A(int a = 0) : _a(a){cout << "A()" << this << endl;}A(const A& src) : _a(src._a){cout << "A(const A& src)" << this << endl;}A& operator=(const A& src){if(this != &src){_a = src._a;cout << "A& operator=(const A& src)" << endl;}}~A(){cout << "~A()" << this << endl;}};class B : public A{private:int _b;public:B(int b) : _b(b), A(){cout << "B()" << this << endl;}B(const B& src) : _b(src._b), A(src)//发生赋值兼容规则(切片){cout << "B(const B& src)" << this << endl;}B& operator=(const B& src){if(this != &src){*(A*)this = src;//将调用基类赋值重载_b = src._b;cout << "B& operator=(const B& src)" <<  endl;}}~B(){cout << "~B()" << this << endl;}};int main(){B b1(10);B b2(20);b1 = b2;return 0;}

C++继承中的对象构造与析构和赋值重载实例分析

读到这里,这篇“C++继承中的对象构造与析构和赋值重载实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++继承中的对象构造与析构和赋值重载实例分析

本文链接: https://www.lsjlt.com/news/324013.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++继承中的对象构造与析构和赋值重载实例分析
    本文小编为大家详细介绍“C++继承中的对象构造与析构和赋值重载实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++继承中的对象构造与析构和赋值重载实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-06-29
  • C++继承中的对象构造与析构和赋值重载详解
    目录一、构造/析构顺序及继承性二、拷贝构造的继承性三、赋值重载不具有继承性总结一、构造/析构顺序及继承性 class A { private: int _a; public: A...
    99+
    2022-11-13
  • C++对象的构造实例分析
    这篇“C++对象的构造实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++对象的构造实例分析”文章吧。一、对象的构造...
    99+
    2023-06-30
  • C++类继承时的构造函数实例分析
    这篇“C++类继承时的构造函数实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++类继承时的构造函数实例分析”文章吧...
    99+
    2023-06-29
  • JavaScript对象和数组的解构赋值实例分析
    本文小编为大家详细介绍“JavaScript对象和数组的解构赋值实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript对象和数组的解构赋值实例分析”文章能帮助大家解决疑惑,下面跟着小编...
    99+
    2022-10-19
  • ES6z2对象新功能与解构赋值的示例分析
    小编给大家分享一下ES6z2对象新功能与解构赋值的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ES6 通过字面量语法扩...
    99+
    2022-10-19
  • ES6中对象解构赋值应用的示例分析
    小编给大家分享一下ES6中对象解构赋值应用的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!...
    99+
    2022-10-19
  • C++类的对象作类成员调用构造、析构函数及静态成员实例分析
    这篇文章主要介绍了C++类的对象作类成员调用构造、析构函数及静态成员实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++类的对象作类成员调用构造、析构函数及静态成员实例分析文章都会有所收获,下面我们一起...
    99+
    2023-06-30
  • PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
    PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用 PHP 面向对象1.构造函数2.析构函数3.继承4....
    99+
    2023-09-02
    php 开发语言 java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作