首页 > 其他分享 >27派生类的继承过程

27派生类的继承过程

时间:2024-01-25 16:57:01浏览次数:22  
标签:27 变量 继承 成员 基类 ebp 派生类

派生类的继承过程

派生类如何初始化从基类继承来的成员变量?

  • 派生类继承所有可继承的成员变量和方法,除了构造和析构函数
  • 通过调用基类的构造函数初始化继承来的成员变量,调用基类的析构函数释放继承来的成员变量
  • 通过调用派生类的构造函数初始化新的成员变量,调用派生类的析构函数释放新的成员变量
#include<iostream>
using namespace std;

class base
{
private:
	int ma;
public:
	base(int a):ma(a)
	{
		cout << "base" << endl;
	}
	~base()
	{
		cout << "~base" << endl;
	}

};

class derive:public base
{
private:
	int mb;
public:
	derive(int a, int b) :base(a), mb(b)
	{
		cout << "derive" << endl;
	}
	~derive()
	{
		cout << "~derive" << endl;
	}
};

int main()
{
	int a = 10, b = 20;
	//此处派生类和基类的构造和析构过程是:
	//先派生类调用基类的构造函数,初始化从基类继承来的成员
	//然后调用派生类自己的构造函数,初始化派生类特有的成员
	//当派生类需要释放,则先释放派生类特有成员占用的外部资源,再调用基类的析构函数,释放继承成员占用的外部资源
	derive dd(a, b);
}

一个题目

class Base
{
public:
	Base()
	{
		/*
		push ebp
		mov ebp, esp
		sub esp, 4Ch
		rep stos esp<->ebp 0xCCCCCCCCC
		vfptr <- &Base::vftable
		*/
		cout << "call Base()" << endl;
		clear();
	}
	void clear() { memset(this, 0, sizeof(*this)); }
	virtual void show()
	{
		cout << "call Base::show()" << endl;
	}
};

class Derive : public Base
{
public:
	Derive()
	{
		/*
		push ebp
		mov ebp, esp
		sub esp, 4Ch
		rep stos esp<->ebp 0xCCCCCCCCC
		vfptr <- &Derive::vftable
		*/
		cout << "call Derive()" << endl;
	}
	void show()
	{
		cout << "call Derive::show()" << endl;
	}
};

int main()
{
	Base* pb1 = new Base();
	/*
	mov eax, dword ptr[pb1]
	mov ecx, dword ptr[eax] eax:0x00000000 不是Base::vftable
	call ecx
	*/
	pb1->show();
	delete pb1;

	// 正常运行
	/*Base* pb2 = new Derive();
	pb2->show();
	delete pb2;*/

	return 0;
}

标签:27,变量,继承,成员,基类,ebp,派生类
From: https://www.cnblogs.com/sio2zyh/p/17987515

相关文章

  • 中国移动CMCC rax3000m免拆机刷OpenWRT uboot 20231027 NAND emmc MT7981
    1、100大洋购买的CMCCARX3000,不刷系统的时候也挺好用,就是无法满足特殊需求2、输入路由地址、192.168.10.1,进入路由管理界面,账号和密码,设备背面默认3、在高级设置->管理->配置管理->导出配置文件、得到:cfg_export_config_file.conf文件 4、在linux系统下,Ubuntu下进行文件配......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
    704.二分查找题目链接:https://leetcode.cn/problems/binary-search/文章讲解:https://programmercarl.com/0704.二分查找.html简单的二分查找法,核心是认识区间的意义,注意以下几点:middle=low+(low+high)/2;这种写法可以防止溢出。注意low和high的循环条件判断,如果是左闭右闭......
  • Redis整形溢出漏洞(CVE-2021-32761)及修复脚本
    今天的计划是修复线上的redis漏洞Redis整形溢出漏洞(CVE-2021-32761)及修复脚本目的:修复生产的redis漏洞,主要是整数溢出漏洞,但是过程中发现还有反弹shell漏洞(次要,毕竟需要密码)计划:获取生产的redis版本账号和密码在测试环境搭建反正环境漏洞的研究与证实测试环......
  • JS逆向实战27——pdd的anti_content 分析与逆向
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!本文已在微信公众号发布目标网站aHR0cHM6Ly9tb2JpbGUucGluZHVvZHVvLmNvbS8=任务获取商品列表接口......
  • 1.27号(本周六)直播:golang开发远程控制工具
    本次的课程的内容为:1、远控编写2、工具代码编写3、工具测试 1月27日晚20:00,我们不见不散~ Ms08067安全实验室专注于网络安全知识的普及和培训,是专业的“图书出版+培训”的网络安全在线教育平台,专注于网络安全领域中高端人才培养。平台已开设Web安全零基础就业,Web高级安全......
  • 面向对象多继承
    '''单继承:一个子类可以继承单个父类多继承:一个子类可以继承多个父类'''classA:defa(self):print('a')classB:defb(self):print('b')classC(A,B):#多继承时,小括号内直接用逗号隔开defc(self):print('c')c=C()......
  • P2627 [USACO11OPEN] Mowing the Lawn G ( [USACO Open11] 修剪草坪/P2034 选择数字 )题
    P2627[USACO11OPEN]MowingtheLawnG搬运工单调队列优化DP简单题,和P2034重了题意:给定一行\(n\)个非负整数\(a_1\cdotsa_n\)。现在你可以选择其中若干个数,但不能有超过\(k\)个连续的数字被选择。你的任务是使得选出的数字的和最大。(直接抄的2034)正着考虑发现很麻烦,......
  • CF327C Magic Five 题解
    CF327CMagicFive搬运工单调队列优化DP加等比数列求和首先\(5\)的倍数要求末尾是\(0\)或\(5\)所以我们只用看给定字符串的\(0\)和\(5\)就好,我们钦定他是最终的数的末尾。在他之前的选择删掉,在他之后的全部删掉,方案数就是\(2^{pow-1}\),答案累加就可以了。容易想到......
  • 面像对象继承
    '''笔属性:颜色、材质、品牌、长度、价格......功能:写字、画画钢笔属性:颜色、材质、品牌、长度、价格......功能:写字、画画眉笔数据:颜色材质品牌长度价格功能:画眉毛粉笔笔属性:颜色、材质、品牌、长度、价格......功能:写字、画画铅笔属性:颜色、材质、品牌、长度、价格............
  • 万源生万德(9.27)
    司准专练T1马拉车。T2字符串哈希,考虑二分之后把矩阵练成字符串。哈希一定保证字符集小。以及矩阵哈希,类似于二维差分,即:\[H_{i,j}=H_{i-1,j}P_1+H_{i,j-1}P_2-H_{i-1,j-1}P_1P_2+S_{i,j}\]\[Hash(x_1,x_2,y_1,y_2)=H_{x_2,y_2}-H_{x_2,y_1-1}P_2^{y_2-y_1+1}-H_{x_1-1,y_2}......