首页 > 其他分享 >类的继承 虚函数 纯虚函数

类的继承 虚函数 纯虚函数

时间:2024-07-13 09:18:49浏览次数:5  
标签:std 函数 继承 Ent 纯虚 public string name

定义:

class TIme:public Ent//Ent Time 是Ent的子集 继承Ent类的公开变量 
                     //Time 可共享Ent ,Ent不能共享Time类

虚函数:

功能:
允许在子类中重写方法 也就是本例子中的Time类中,在Ent类中重写virtual让它做其他事情
例如:

class Ent
{
public:
	virtual std::string Getname() { //虚拟函数 子类中重写方法 告诉编译器建立一个V表 
//若是该函数被重写了,你可以指向正确的函数,
//因为基类和继承类中方法名字相同 不知道指哪个方法,
//用了虚函数可以避免,能明确知道用哪个类中的函数。

		return "Ent";
	}
};

class Time:public Ent//继承Ent类
{
private:
	std::string m_name;
public:
	Time(const std::string& name)//可输入名字
		:m_name(name)
	{

	}
	std::string Getname() override //override写不写都行 最好写上 能避免前面的函数名拼写错误
	{
		return m_name;
	}
};
void print(Ent* entity)
{
	std::cout << entity->Getname() << std::endl;
}

int main()
{
	Ent e;
	Time b("ss");
	print(&b);
	print(&e);//没用virtual前 两个结果都是都是用Ent中的方法;
}

V表

是什么:是一个表结构,包含基类中所有的 虚函数 的映射,在基类中的虚函数运行时把它们映射到正确的
复写(override)函数。
条件:若想要复写一个函数必须将基类中的奇函数标记为虚函数(前面加virtual)
虚拟函数工作原理
:会建立一个v表 包括基类中有个指针指向V表 每次调用虚函数时
都要遍历这个表,来确定映射到哪个函数

纯虚函数

是什么:
一种特殊类型的虚函数 本质与其他语言的接口相同或抽象方法
作用:
允许在基类中定义一个未实现的方法,然后强制子类去实际实现它们;
什么时候用:
如果确保类都有一个特定的方法 ,可以将这个类作为参数放入一个通用函数中,可以调用这个方法或者做其他事情。

创建一个类 里面都是未实现的方法,强制子类去实现方法的功能——接口
所以类的接口只包含未实现的方法 作为模版 因为该接口不包含方法实现,所以我们不可能实例化那个类(接口类);
代码示例:

class printable
{
public:
	virtual std::string getname() = 0;

};
class Entity: public printable
{
		public:
			 std::string getname()override
			{
				return "Ent";
			}
};
class player:public Entity,printable
{
	
		private:
			std::string m_name;
		public:
			player(const std::string& name)//可输入名字
				:m_name(name)
			{
		
			}
			std::string getname() override
			{
				return m_name;
			}
		
};

void print( printable* obj)//传入接口 里面有各种方法
{
	std::cout << obj->getname() << std::endl;//堆接口里的方法进行具体操作
}

int main()
{
	Entity* entity=new Entity();
	print(entity);
}

标签:std,函数,继承,Ent,纯虚,public,string,name
From: https://www.cnblogs.com/WZline/p/18299682

相关文章

  • 【C语言】字符串与相关操作函数
    字符串思路分析在注释文章目录字符串一、字符串的定义1.使用sizeof()计算他们的长度二、sizeof和strlen的区别1.sizeof操作符2.strlen函数三、动态开辟字符串1.malloc函数2.realloc函数3.free函数4.memset函数四、几种字符串常用的API1.strncpy函数2.asse......
  • 实验9 存储过程与函数的创建管理实验
    一、实验目的:理解存储过程和函数的概念。掌握创建存储过程和函数的方法。掌握执行存储过程和函数的方法。掌握游标的定义、使用方法。二、实验内容1.某超市的食品管理的数据库的Food表,Food表的定义如表所示,Food表的定义各列有如下数据:‘QQ饼干’,‘QQ饼干厂’,2.5,‘2......
  • c语言的简易教法—— 函数递归
    文章目录一、什么是递归?1.1递归的思想1.2递归的限制条件二、递归案例2.1案例1:求n的阶层2.1.1分析2.1.2递归函数(Fact)的代码实现2.1.3测试:main函数实现2.1.4运行结果和画图推演2.1.5扩展:迭代方法求解n的阶乘2.2案例2:顺序打印⼀个整数的每⼀位2.2.1分析2.2.2打印数(p......
  • 如何在函数中使用return返回axios的请求结果
    使用场景:在添加学生上课记录的时候,需要先获取学生的剩余课时,需要通过接口获取。所以需要封装一个方法,能够通过接口获取学生的课时数量。解决方案:通过异步解决封装方法的代码如下:constgetStudentCourseCount=async()=>{letnum=0awaitaxios({method:......
  • Java三剑客:封装、继承、多态的魔法世界
    第一章:封装的艺术——保护你的宝藏案例分析:银行账户系统想象一下,你正在构建一个银行账户系统。每个账户都有一个余额,这个余额需要受到严格的保护,不能被随意修改。我们可以通过封装来实现这一目标。示例代码:publicclassBankAccount{privatedoublebalance;//......
  • 10个Python函数参数进阶用法及代码优化
    目录1.默认参数值:让函数更加灵活2.关键字参数:清晰的调用方式3.*args:拥抱不确定数量的位置参数4.**kwargs:处理不确定数量的关键字参数5.参数解包:简化多参数的传递6.命名关键字参数:限制关键字参数7.局部变量与全局变量:理解作用域8.高级:装饰器(@decorator)9.Lambd......
  • python每日学习4:函数的定义和各类参数定义与用法
    目录目录一、函数的定义二、参数的定义和用法1、必选参数2、默认参数3、可变参数4、关键字参数5、命名关键字参数三、参数在实际操作中的要求一、函数的定义1、函数代码块以def关键词开头,后接函数名称和圆括号()2、在圆括号内定义传入参数3、函数的第一行语句可以......
  • 我的MYSQL学习心得, 自定义存储过程和函数
    转载:https://www.cnblogs.com/lyhabc/p/3793524.html我的MYSQL学习心得(一)简单语法我的MYSQL学习心得(二)数据类型宽度我的MYSQL学习心得(三)查看字段长度我的MYSQL学习心得(四)数据类型我的MYSQL学习心得(五)运算符我的MYSQL学习心得(六)函数我的MYSQL学习心得(七)查询我的MYSQ......
  • 动态添加HTML时onclick函数参数传递
    onclick函数动态传参1.参数为数值类型时:var tmp=123;var strHTML="<divonclick=func(" +tmp+")>点击弹出数据及其类型</div>";info.append(strHTML); function func(tmp){    alert(typeof tmp+"" +tmp);}string12......
  • C语言函数详解
    文章目录函数的概念库函数库函数的使⽤⽅法⾃定义函数形参和实参基本的传参类型嵌套调⽤链式访问多个⽂件函数的概念数学中我们其实就⻅过函数的概念,⽐如:⼀次函数y=kx+b,k和b都是常数,给⼀个任意的x,就得到⼀个y值。其实在C语⾔也引⼊函数(function)的概念,有些翻译为......