虚函数
时间:2020-04-11
本文章向大家介绍虚函数,主要包括虚函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
虚函数允许我们在子类中将方法进行重写,假如有AB两个类,B是A的子类,如果我们在A中建立一个方法并将其标记为虚函数,那么我们将可以在B类中对其进行改写以完成其他的功能
#include<iostream> #include<string> class Entity { public: std::string GetName() { return "Emtity"; } }; class Player :public Entity { private: std::string m_Name; public: Player(const std::string& name) :m_Name(name) {}; std::string GetName() { return m_Name; } }; int main() { Entity* e = new Entity(); std::cout << e->GetName() << std::endl; Player* p = new Player("Wang TN"); std::cout << p->GetName() << std::endl; std::cin.get(); }
在主函数中加上一个新的Entity,然后令它指向子类,打印出来结果如下
加上一个在全局中加上一个print函数,函数的输入为Entity类型
#include<iostream> #include<string> class Entity { public: std::string GetName() { return "Emtity"; } }; class Player :public Entity { private: std::string m_Name; public: Player(const std::string& name) :m_Name(name) {}; std::string GetName() { return m_Name; } }; void Print(Entity* e) { std::cout << e->GetName() << std::endl; } int main() { Entity* e = new Entity(); Print(e); Player* p = new Player("Wang TN"); Print(p); std::cin.get(); }
以看到打印的结果两个都是Entity
如果我们想要打印出player的GetName,此时就需要虚函数,虚函数也是一种动态调度,如果需要写虚函数,那么要将basic class的basic function设为虚函数。
此时程序结果如下,注意override复写的函数必须和前面的虚函数同名,否则将会出错,复写不是虚函数的父类函数也会出错
原文地址:https://www.cnblogs.com/wangtianning1223/p/12680648.html
- ListView列表数据源——Adapter
- 初识ListView
- 响应Android系统的事件
- ImageSwitcher和TextSwitcher
- Android BLE 基础框架全新改版
- Android 混淆从入门到精通
- 基础篇章:关于 React Native 之 ViewPagerAndroid 组件的讲解
- 基础篇章:关于 React Native 之 DrawerLayoutAndroid 组件的讲解
- Android 使用 ApachePOI 组件读写 Word doc 和 docx 文件
- Android 开发中如何动态加载 so 库文件
- 良心推荐:总结 Android 开发中必备的代码 Review 清单
- 强烈推荐:基于Java反射实现一个 Android ORM 框架
- Android 高效安全的本地广播 LocalBroadcast 完全解析
- Android的编译打包流程详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel 创建可以传递参数 Console服务的例子
- laravel实现查询最后执行的一条sql语句的方法
- 解决laravel groupBy 对查询结果进行分组出现的问题
- laravel批量生成假数据的方法
- 对laravel in 查询的使用方法详解
- PHP使用redis位图bitMap 实现签到功能
- thinkphp5+layui实现的分页样式示例
- Laravel实现搜索的时候分页并携带参数
- PHP7.3.10编译安装教程
- Laravel-添加后台模板AdminLte的实现方法
- PHP7 安装event扩展的实现方法
- 在laravel框架中使用model层的方法
- 漂亮的thinkphp 跳转页封装示例
- thinkphp5框架前后端分离项目实现分页功能的方法分析
- laravel 根据不同组织加载不同视图的实现