公有继承基类和派生类之间构造和析构、赋值和拷贝构造函数的关系(上)_公有继承 构造-程序员宅基地

技术标签:   

公有继承基类和派生类之间构造和析构、赋值和拷贝构造函数的关系(上)

1、公有继承基类和派生类之间构造函数的关系
如果一个类Text在公有继承了Object类,在创建一个Text对象t时会先调用Object的构造函数,然后再调用Text的构造函数,不论Text的形参列表声明中Object的声明在前在后。
代码测试:

#include<iostream>
using namespace std;
class Object
{
    
	private:
		int val;
	public:
	Object(int a=0) :val(a)
	{
    
		cout<<"construct Object"<<endl;
	}
} ;
class Text :public Object
{
    
	private:
		int num;
	public:
		Text(int b=0) :num(b),Object(b+10)
		{
    
			cout<<"construct Text"<<endl;
		}
};
int main()
{
    
	Text t(10);
	return 0;
}

测试结果:
在这里插入图片描述
2、公有继承基类和派生类之间析构函数的关系
和构造函数相反,如果类Text在公有继承了Object类,在析构一个Text对象t时,会先调用Object的析构函数,然后再调用Text的析构函数。
代码测试:

#include<iostream>
using namespace std;
class Object
{
    
	private:
		int val;
	public:
	Object(int a=0) :val(a)
	{
    
		cout<<"construct Object"<<endl;
	}
	~Object()
	{
    
		cout<<"destory Object"<<endl;
	}
} ;
class Text :public Object
{
    
	private:
		int num;
	public:
		Text(int b=0) :num(b)
		{
    
			cout<<"construct Text"<<endl;
		}
		~Text()
		{
    
			cout<<"destory Text"<<endl;
		}
};
int main()
{
    
	Text t(10);
	return 0;
}

测试结果:
在这里插入图片描述
2、公有继承基类和派生类之间赋值函数的关系
如果类Text在公有继承了Object类,把Text对象t2赋值给Text对象t1,在没有给出operator=函数的情况下,系统会抓取t1、t2的地址,把t2按位复制到t1,此时t1和t2里的数据完全相同;如果Object类中给出了operator=函数,子类Text也会自动生成相应的operator=函数,也能完成t2对t1的赋值;如果子类Text在类中给出了operator=函数,不管父类Object中有没有operator=函数,如果没在子类Text的operator=函数中调用父类Object中的operator=函数,那么t1对象中父类的那部分将不会发生改变,要在子类Text的operator=函数中调用父类Object中的operator=函数才能完成t1对象中父类部分的赋值。
下面给出基类、派生类都给出operator=函数的完全赋值:

#include<iostream>
using namespace std;
class Object
{
    
	private:
		int val;
	public:
	Object(int a=0) :val(a)
	{
    
		cout<<"construct Object"<<endl;
	}
	~Object()
	{
    
		cout<<"destory Object"<<endl;
	}
	Object& operator=(const Object& obj)
	{
    
		if(this!=&obj)
		{
    
		val=obj.val;
		}
		cout<<"operator= Object"<<endl;
		return *this;
	}
	void showObject()
	{
    
		cout<<val<<endl;
	}
} ;
class Text :public Object
{
    
	private:
		int num;
	public:
		Text(int b=0) :num(b),Object(b+10)
		{
    
			cout<<"construct Text"<<endl;
		}
		~Text()
		{
    
			cout<<"destory Text"<<endl;
		}
		Text& operator=(const Text& t)
		{
    
			if(this!=&t)
			{
    
				Object::operator=(t);
				num=t.num;
			}
			cout<<"operator= Text"<<endl;
			return *this;
		}
		void showText()
		{
    
			cout<<num<<endl;
		}
};
int main()
{
    
	Text t1(10);
	t1.showObject();
	t1.showText();
	Text t2(20);
	t1=t2;
	t1.showObject();
	t1.showText();
	t2.showObject();
	t2.showText();
	return 0;
}

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43973403/article/details/114580478

智能推荐

Tomcat安装及配置教程(保姆级)【最新史上最全版】-程序员宅基地

文章浏览阅读10w+次,点赞193次,收藏947次。Tomcat安装及配置教程(保姆级)【最新史上最全版】tomcat保姆级安装教程Tomcat安装教程(以tomcat-9.0.62为例:)1.下载安装包可以从官网下载安装包:(1)从官网下载输入网址进入官网sshttp://tomcat.apache.org/_tomcat安装及配置教程

SPFA算法详解——判断负权环_spfa算法判断负环-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏34次。SPFA(Shortest Path Faster Algorithm)(队列优化)算法是求单源最短路径的一种算法。它是在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。 Bellman-Ford算法虽然可以处理负环,但是时间复杂度为O(ne),e为图的边数,在图为稠密图的时候,是不可接受的。 Bellman-Ford算法的缺点在于,当某一个..._spfa算法判断负环

步进电机定位不准的原因分析_龙印旗帜机步进走不准-程序员宅基地

文章浏览阅读1.3k次。摘要: 步进电机定位不准的原因分析:  1)一般的步进驱动器对方向和脉冲信号都有一定的要求,如:方向信号在第一个脉冲上升沿或下降沿(不同的驱动器要求不一样)到来前数微秒被确定,否则会有一个脉冲所运转的角度与实际需要的转向相反,最 ... 步进电机定位不准的原因分析:   1)一般的步进驱动器对方向和脉冲信号都有一定的要求,如:方向信号在第一个脉冲上升沿或下降_龙印旗帜机步进走不准

用Python绘制渐变三角螺旋线_turtle画渐变线条-程序员宅基地

文章浏览阅读2.5k次,点赞7次,收藏11次。本文章主要教大家如何制作渐变颜色的三角形螺旋线,下面是代码块的解析,仅供学习python的小伙伴们参考。_turtle画渐变线条

(转)SRC)基于稀疏表示的人脸识别_双字典稀疏表示分类(dd-src)在人脸识别中的用法-程序员宅基地

文章浏览阅读322次。原 (SRC)基于稀疏表示的人脸识别 2013年11月01日 16:19:22 xiaoshengforever 阅读数:30632更多 <div class="tags-box space"> <..._双字典稀疏表示分类(dd-src)在人脸识别中的用法

十五、帧内编码:1、帧内编码的基本原理-程序员宅基地

文章浏览阅读4k次,点赞3次,收藏10次。帧内编码相对其他模块来说相对简单一、帧内编码的重要意义帧内编码时I帧主要的压缩编码方法,帧内编码的性能对视频整体编码结果具有重要影响I帧在编码时只采用当前帧的图像内部数据,体积通常比B/P帧更大,对整体码率的影响很大I帧在帧间编码中通常作为B/P帧的参考数据,如果I帧编码出现错误,将影响B/P帧的编码结果二、早起视频压缩标准的帧内编码1、简介在早期的视频编码标准MPEG-1/MPEG-2中,帧内编码已经发挥重要作用,只不过是比H264简单的多。MPEG-1/MPEG-2中已经定义了_帧内编码

随便推点

/usr/bin/ld: /usr/bin/ld: cannot find -lc-程序员宅基地

文章浏览阅读940次。问题描述: 在专题1的交叉工具链讲解部分,使用静态链接方式编译 gcc -static hello.c -o hello, 提示 /usr/bin/ld: /usr/bin/ld: cannot find -lc。 问题原因: 搜索了之后基本确定是因为 /usr/bin/中缺少libc.a 这个文件。 它是编译器静态编译过程中要用的库文件。处理办法:利用QQ群里共享的文件g_/usr/bin/ld: cannot find -lc

3、mqtt客户端演示(MQTT通信协议(mosquitto)发布订阅 C语言实现)_c语言mqtt订阅消息-程序员宅基地

文章浏览阅读1.1k次,点赞3次,收藏9次。MQTT通信协议(mosquitto)发布订阅 C语言实现_c语言mqtt订阅消息

需求分析-程序员宅基地

文章浏览阅读7.3w次,点赞29次,收藏136次。(一) 需求分析的目标和任务他的基本任务是:准确地回答“系统必须做什么”这个问题,也就是对目标系统提出完整、准确、清晰、具体的要求1、确定对系统的综合要求:功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束(设计约束或实现约束描述在设计或实现应用系统时应遵守的限制约束条件)、逆向需求(说明软件系统不应该做什么)、将来可能提出的需求2、分析系统的数据需求3、导出系统..._需求分析

数字物流系统的构建-程序员宅基地

文章浏览阅读1k次。(中国智慧城市网讯)数字物流系统源于实体物流,物理世界的实体物流是构建数字物流系统的基础。数字物流系统应该是物理世界的实际物流系统和相应的虚拟物流系统两个层面血肉相连、相互作用、有机统一的..._数字物流系统

File详解_file表示硬盘上的-程序员宅基地

文章浏览阅读731次。/* java.io.File; 1.File类和流无关,不能通过该类完成文件的读和写 2.File是文件和目录路径名的抽象表示形式 File代表的是硬盘上的Directory和file*/import java.io.*;import java.util.*;import java.text.*;public class fuck13{ public static void main(..._file表示硬盘上的

fast-rcnn,faster-rcnn相关细节_faster rcnn resize-程序员宅基地

文章浏览阅读1k次。详见大神博客http://closure11.com/rcnn-fast-rcnn-faster-rcnn%E7%9A%84%E4%B8%80%E4%BA%9B%E4%BA%8B/Bounding-box Regression有了ROI Pooling层其实就可以完成最简单粗暴的深度对象检测了,也就是先用selective search等proposal提取算法得到一批box坐标,_faster rcnn resize