c++249多态

news2024/11/13 10:05:48
#include<iostream>
using namespace std;
class Parent
{
public:
	Parent(int a)
	{
		this->a = a;
		cout << " Parent" << a << endl;
	}
public:
	virtual void print()//在子类里面可写可不写 
	{
		cout << "Parent" <<a<< endl;
	}
protected:
private:
	int a;
};

class Child:public Parent 
{
public:
	Child(int b):Parent(10)
	{
		this->b = b;
		cout << " Child b" << b << endl;
	}
public:
	void print()
	{
		cout << "Child" <<b<< endl;
	}
protected:
private:
	int b;

};


void main()
{
	//可以把子类的对象赋值给指针
	Parent* base = NULL;
	Parent p1(20);
	Child c1(30);
	base = &p1;
	base->print();//父类
	base = &c1;
	base->print();//执行谁的 ->面向对象新需求



	  
	return;
}

多态如何演变:
在这里插入图片描述

#include<iostream>
using namespace std;

class HeroFighter
{
public:
	virtual int power()
	{
		return 10;
	}
};

class EncmyFighter
{
public:
	int attact()
	{
		return 15;
	}
};

class AdvHeroFighter :public HeroFighter
{
public:
	virtual  int power()
	{
		return 10;
	}
};

//


class AdvAdvHeroFighter :public HeroFighter
{
public:
	virtual int power()
	{
		return 30;
	}
};
void play(HeroFighter *hf, EncmyFighter *ef)
{
	//多态场景
	if (hf->power() > ef->attact())//hf->power() 会有多态发生
	{
		cout << "hero win" << endl;
	}
	else
	{
		cout << "hero faule" << endl;
	}
	
}
void main()
{
	HeroFighter hf;
	EncmyFighter ef;
	AdvHeroFighter advhf;

	//

	AdvAdvHeroFighter advadvhf;

	play(&hf, &ef);
	play(&advhf, &ef);
	//
	play(&advadvhf, &ef);//这个框架能把后来写的代码调用起来

 }
//多态框架
//play 给对象搭建舞台 看成一个框架 
//封装:突破函数 用类做函数参数时候 可以使用对象的属性和对象的方法
//继承: A B代码复用
//多态:可以使用未来  
//实现多态的三个条件:1.要有继承 2.要有函数重写3.父类指针指向子类对象


//void main01()
//{
//	HeroFighter hf;
//	EncmyFighter ef;
//	AdvHeroFighter advhf;
//	if (hf.power() > ef.attact())
//	{
//		cout << "hero win" << endl;
//	}
//	else
//	{
//		cout << "hero faule" << endl;
//	}
//	if (advhf.power() > ef.attact())
//	{
//		cout << "hero win" << endl;
//	}
//	else
//	{
//		cout << "hero faule" << endl;
//	}
//	return;
//}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

虚析构

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class A
{
public:
	A()
	{
		p = new char[20];
		strcpy(p, "obja");
		cout << "a" << endl;
	}
	virtual ~A()
	{
		delete[] p;
		cout << "~a" << endl;
	}

	protected:
	private:
		char* p;
};

class B  :public A
{
public:
	B()
	{
		p = new char[20];
		strcpy(p, "obja");
		cout << "b" << endl;
	}
	~B()
	{
		delete[] p;
		cout << "~b" << endl;
	}

protected:
private:
	char* p;
};
class C :public B
{
public:
	C()
	{
		p = new char[20];
		strcpy(p, "obja");
		cout << "c" << endl;

	}
	~C()
	{
		delete[] p;
		cout << " ~`c" << endl;
	}

protected:
private:
	char* p;
};
//只执行了父类的析构 
//通过父类指针把子类的析构函数都执行一遍
//释放所有的子类资源 只能用virtual
void howtodelete(A *base)
{
	delete base;//不会表现成多态
}

void main()
{
	C* myc = new C;//how delete 匹配  new会自动调用~函数 
	howtodelete(myc);



	return;
}

!在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2142376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟机centos_7 配置教程(镜像源、配置centos、静态ip地址、Finalshell远程操控使用)

文章目录 一、下载镜像源&#xff08;准备工作&#xff09;1、开源网站2、下载 二、VMware配置centos三、配置静态IP地址四、Finalshell使用1、下载Finalshell2、连接虚拟机 五、谢谢观看&#xff01; 一、下载镜像源&#xff08;准备工作&#xff09; 1、开源网站 有许多开源…

[Linux]:进程间通信(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. system V通信 前面我们所探究的通信方式都是基于管道文件的&#xff0c;而…

day22JS-npm中的部分插件使用方法

1. 静态资源目录 静态资源目录就是访问服务器的某些路劲时候&#xff0c;服务器可以吐出一个写好的指定页面。 实现思路&#xff1a; 1、先判断要找的路径是否是文件&#xff0c;如果是文件&#xff0c;就加载发给对方。 2、如果是文件夹&#xff0c;找到这个文件夹所在路径中…

STL相关简介

string 看到这个词&#xff0c;相信大家一定都很好奇什么是string&#xff0c;它有什么作用呢&#xff1f;今天&#xff0c;就让我们一起来了解一下关于string的简介吧~ 目录 string 1. 什么是STL 2. STL的版本 3. STL的六大组件 4. STL的重要性 5. 如何学习STL 6.STL的…

modbus调试助手/mqtt调试工具/超轻巧物联网组件/多线程实时采集/各种协议支持

一、前言说明 搞物联网开发很多年&#xff0c;用的最多的当属modbus协议&#xff0c;一个稳定好用的物联网组件是物联网平台持续运行多年的基石&#xff0c;所以这个物联网组件从一开始就定位于自研&#xff0c;为了满足各种场景的需求&#xff0c;当然最重要的一点就是大大提…

【题解】—— [CSP-J2019 江西] 面积

【题解】—— [CSP-J2019 江西] 面积 [CSP-J2019 江西] 面积题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2 提示 1.思路解析2.AC代码 [CSP-J2019 江西] 面积 通往洛谷的传送门 题目描述 Alice 有一个边长为 a a a 的正方形&#xff0c;Bob 有一个长宽…

【Linux】生产者消费者模型:基于阻塞队列,使用互斥锁和条件变量维护互斥与同步关系

目录 一、什么是生产者消费者模型 二、为什么要引入生产者消费者模型&#xff1f; 三、详解生产者消费者模型 ​编辑 生产者和生产者、消费者和消费者、生产者和消费者&#xff0c;它们之间为什么会存在互斥关系&#xff1f; 生产者和消费者之间为什么会存在同步关系&…

信奥学习规划(CSP-J/S)

CSP-J组学习路线规划 CSP-S组学习规划

AbMole带你解密穿心莲:天然植物中的抗癌新星

在浩瀚的自然界中&#xff0c;隐藏着无数未被完全发掘的宝藏&#xff0c;其中&#xff0c;穿心莲&#xff08;Andrographis paniculata&#xff09;作为一种传统的药用植物&#xff0c;正逐渐展现出其在现代医学研究中的独特魅力。近日&#xff0c;一项发表在《Phytomedicine》…

Jemter项目实战(黑马程序员)

视频网址&#xff1a;02测试数据准备_哔哩哔哩_bilibili 自动化脚本架构搭建 新增和修改 新增 删除和查询 弱压力、高并发、高频率 弱压力测试 高并发 高频率 生成图形化报告

深入理解命令模式:行为设计模式的精髓

在软件设计中&#xff0c;命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将请求封装成对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff0c;并且支持请求的排队、记录日志以及撤销操作。命令模式是设计模式中的一种&…

通信工程学习:什么是EPON以太网无源光网络

EPON&#xff1a;以太网无源光网络 EPON&#xff08;Ethernet Passive Optical Network&#xff0c;以太网无源光网络&#xff09;是一种结合了以太网技术和无源光网络&#xff08;PON&#xff09;优势的高速、大容量宽带接入技术。以下是关于EPON的详细解释&#xff1a; 一、…

【经典文献】双边滤波

文章目录 ICCV 1998基本思路双边高斯滤波 ICCV 1998 1995年&#xff0c;Aurich和Weule提出一种非线性高斯滤波器&#xff0c;三年后&#xff0c;Tomasi和Manduchi将其用于图像平滑&#xff0c;并将其命名为双边滤波。 Aurich, V., & Weule, J. (1995). Non-linear Gaussi…

Git常用指令整理【新手入门级】【by慕羽】

Git 是一个分布式版本控制系统&#xff0c;主要用于跟踪和管理源代码的更改。它允许多名开发者协作&#xff0c;同时提供了强大的功能来管理项目的历史记录和不同版本。本文主要记录和整理&#xff0c;个人理解的Git相关的一些指令和用法 文章目录 一、git安装 & 创建git仓…

蓝桥杯-STM32G431RBT6(串口)

前言 一、配置 二、使用步骤 1.串口发送 代码逻辑 效果展示 2.串口接收单个字符 代码逻辑 中断回调函数 3.串口接受字符串 代码逻辑 字符串函数 中断回调函数 声明 代码开源 前言 一、配置 二、使用步骤 1.串口发送 代码逻辑 sprintf(tx_buf,"jin ke\r\n&…

(学习总结17)C++继承

C继承 一、继承的概念与定义继承的概念继承定义1. 定义格式2. 继承基类成员访问方式的变化 继承类模板 二、基类和派生类间的转换三、继承中的作用域隐藏规则 四、派生类的默认成员函数4个常见默认成员函数实现一个不能被继承的类 五、继承与友元六、继承与静态成员七、多继承及…

DFS:二叉树中的深搜

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. 深搜的总结 二. 二叉树的深搜题目 2.1 计算布尔二叉树的值 2.2 求根节点到叶节点的数字之和 2.3 二叉树剪枝 2.4 验证二叉搜索树 2.5 二叉搜索树中第k小的节点 2.6 二叉树的…

【C++】——继承详解

目录 1、继承的概念与意义 2、继承的使用 2.1继承的定义及语法 2.2基类与派生类间的转换 2.3继承中的作用域 2.4派生类的默认成员函数 <1>构造函数 <2>拷贝构造函数 <3>赋值重载函数 <4析构函数 <5>总结 3、继承与友元 4、继承与静态变…

在VC++6.0中创建一个C++项目

1、下载并安装VC6.0 暂时不介绍下载安装&#xff0c;后续可能会补充 2、打开VC6.0 初始界面如下图&#xff1a; 3、创建一个空工程 文件-新建 在新建弹框中选择&#xff1a;工程-win32 console Application-填写工程名、选择保存路劲-确定 在新的弹框中&#xff0c;选择&…

BIT小学期-电话号码问题

Output 输出包括两个部分&#xff0c;第一个部分是错误的电话号码&#xff0c;对于这些号码应当按照输入的顺序以原始的形式输出。在输出错误电话号码前输出Error:&#xff0c;随后输出这些号码&#xff0c;如果没有错误的电话号码&#xff0c;则输出Not found. 第二部分是重…