首页 > 编程语言 >C++ 135类和对象_面像对像_多态

C++ 135类和对象_面像对像_多态

时间:2024-08-30 22:23:25浏览次数:11  
标签:函数 子类 面像 多态 virtual 135 父类

135类和对象_面像对像_多态
学习内容
 1.抽象类
 2.虚函数
 3.纯虚函数

动态多态满足条件
1.有继承关系
2.子类重写父类函数
3.用父类的函数指针 指向 子类的对象 AnimalBaseModel & animal

代码

#include<iostream>
using namespace std;//cout 在这里,没有它会报错
#include<string>

//135类和对象_面像对像_多态
//学习内容
// 1.抽象类
// 2.虚函数
// 3.纯虚函数

//动态多态满足条件
//1.有继承关系
//2.子类重写父类函数
//3.用父类的函数指针 指向 子类的对象 AnimalBaseModel & animal

//动物父类,基类 抽象类
class AnimalBaseModel
{
public://公共
	string m_Name;
	string m_Remark;

	/// <summary>
	/// virtual 函数 就可以实现 地址晚绑定
	/// 要子类重写这个 函数就是 virtual 函数
	/// </summary>
	virtual void Speak()
	{
		cout << "动物在说话" << endl;
	}

	//当有了 纯虚函数 这个类就是抽象类
	//抽象类 不能实例化

	//纯虚函数, 子类一定要重写此函数,否则子类也不能实例化,因为子类也是抽象类
	virtual bool Move() = 0;

	virtual void Eat() = 0;
};

//猫子类 继承 了父类
class CatModel : public AnimalBaseModel
{
public:

	CatModel()
	{

	}

	CatModel(string name)
	{
		m_Name = name;
	}

	void Speak()
	{
		cout << "小猫[" << m_Name << "]在说话" << endl;
	}

	bool Move()
	{
		cout << "小猫[" << m_Name << "]在移动" << endl;
	}

	void Eat()
	{
		cout << "小猫[" << m_Name << "]在吃饭" << endl;
	}
};

//狗子类 继承 了父类
class DogModel : public AnimalBaseModel
{
public:

	DogModel()
	{

	}

	DogModel(string name)
	{
		m_Name = name;
	}
	//重写父类虚函数
	void Speak()
	{
		cout << "小狗["<< m_Name <<"]在说话" << endl;
	}

	bool Move()
	{
		cout << "小狗[" << m_Name << "]在移动" << endl;
	}

	void Eat()
	{
		cout << "小狗[" << m_Name << "]在吃饭" << endl;
	}
};

//地址早绑定 在编译阶段确定函数的地址

//动态多态满足条件
//1.有继承关系
//2.子类重写父类函数
//3.用父类的函数指针 指向 子类的对象 AnimalBaseModel & animal

void doSpeak(AnimalBaseModel & animal)// 用父类的函数指针 指向 子类的对象
{
	animal.Speak();
}

int main()
{
	CatModel cat("ww");
	doSpeak(cat);

	DogModel dog("dd");
	doSpeak(dog);

	system("pause");
}

标签:函数,子类,面像,多态,virtual,135,父类
From: https://blog.csdn.net/cjh16606260986/article/details/141613695

相关文章

  • day02-面向对象-多态&抽象类&接口
    一、⭐多态⭐1.1概述1.多态  是在继承/实现情况下的一种现象,表现为对象多态和行为多态​2.⭐对象多态写法:​继承:父类变量=new子类1();​父类变量=new子类2();实现:接口变量=new实现类();​......
  • 安科瑞DTSD1352/CF终端电能电表如何实现尖峰平谷分时计费
    安科瑞徐赟杰长期以来,我国施行居民用电低价政策,居民电价大幅低于供电成本,虽然实施了全天分三时段的阶梯电价政策,但过去近10年中高峰节电的效果却不够明显。从分时用电运作机制来看,居民用电价格的波动幅度不大,但公共资源廉价供给难以长期持续。作为电力消费的基本单元,家庭或者......
  • PHP8面向对象快速入门三 类的继承 类方法属性重写和final关键字 parent调用父类的方法
    在PHP中,类的继承(继承)是一种机制,允许一个类继承另一个类的属性和方法,从而实现代码的重用和扩展。继承可以帮助你创建一个基于现有类的新类,保留原有类的特性并增加或修改其功能。classAnimal{public$name='dongwu';protected$age=1;private......
  • 南沙区信奥赛CSP-J/S 陈老师解题:1350:【例4-11】最短网络(agrinet)
    ​ 【题目描述】农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。你将得到一......
  • C++基础/C++中的多态(关于虚...)
    C++中的多态(关于虚...)1.前置基础知识1.1对象是如何存储在内存中的#include<iostream>#include<string>classAnimal{private:stringname;intage;public:Animal(std::stringname,intage):name(name),age(age){};~Animal();virtu......
  • C++基础/C++中的多态(关于虚...)
    C++中的多态(关于虚…)1.前置基础知识1.1对象是如何存储在内存中的#include<iostream>#include<string>classAnimal{private:stringname;intage;public:Animal(std::stringname,intage):name(name),age(age){};~Animal();......
  • 135. 分发糖果(leetcode)
    https://leetcode.cn/problems/candy/description/贪心,策略是确定一侧的正确性,再确定另一侧的正确性,最后综合作为正确答案,其中先确定一侧的正确性是局部最优,确定两侧的正确性的局部最优,且找不到反例就可以推出全局最优答案classSolution{publicintcandy(int[]ra......
  • 代码随想录训练营day29|134.加油站,135. 分发糖果,860.柠檬水找零,406.根据身高重建队列
    加油站想法:暴力遍历?好吧第一遍写的时候读错题意了,以为是比较gas[i]与cost[i+1]的值,shit。intsum1=0,sum2=0;for(intg:gas)sum1+=g;for(intc:cost)sum2+=c;if(sum1<sum2)return-1;//如果gas没cost多intyouliang=0;intn=gas.size()......
  • 封装、继承、重写和多态
    面对对象的编程(OOP:Object-orientedprogramming)属性+方法=类以类的方式组织代码,以对象封装数据封装继承多态类是对象的模板同一包内class文件内容可以相互调用,而不用import一个文件内可以有多个class类,但只有有一个public类创建对象一个程序只有一个主启动(main......
  • C++多态——虚函数
    其实在学习的时候,一直没有搞懂为什么要用虚函数,为什么需要传递基类的引用或者指针,要用谁的时候写谁不就好了。其实这时候我的思维还局限在面向过程编程,不是面向对象编程。现在搞明白了,因为多态,利用继承的思想,减少代码复用。我们来看下面的例子。#include<iostream>usingnamesp......