C++ //多态 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 //动态多态:派生类和虚函数实现运行时多态
1 //多态
2 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名
3 //动态多态:派生类和虚函数实现运行时多态
4
5 //静态多态和动态多态的区别
6 //静态多态的函数地址早绑定 - 编译阶段确定函数地址
7 //动态多态的函数地址晚绑定 - 运行阶段确定函数地址
8
9 //动态多态
10 //1.有继承关系
11 //2.子类要重写父类的虚函数
12
13 //动态多态使用
14 //父类的指针或这引用 指向子类的对象
15
16 #include <iostream>
17 #include <string>
18 using namespace std;
19
20 //多态
21
22 //动物类
23 class Animal
24 {
25 public :
26 virtual void speak() //虚函数
27 {
28 cout << "动物在说话" << endl;
29 }
30
31 };
32 //猫类
33 class Cat : public Animal
34 {
35 public:
36 //重写 函数返回值类型 函数名 参数列表 完全相同
37 void speak()
38 {
39 cout << "小猫在说话!" << endl;
40 }
41 };
42
43 //狗类
44 class Dog : public Animal
45 {
46 public:
47 void speak()
48 {
49 cout << "小狗在说话!" << endl;
50 }
51 };
52
53 //执行说的函数
54 //地址早绑定 在编译阶段确定了函数地址
55 //如果执行让猫说话,那么这个函数地址不能提前绑定,需要在运行阶段进行绑定,地址晚绑定
56
57 void doSpeak(Animal& animal) //Animal &animal = cat;
58 {
59 animal.speak();
60 }
61
62 void test01()
63 {
64 Cat cat;
65 doSpeak(cat);
66
67 Dog dog;
68 doSpeak(dog);
69 }
70
71 int main()
72 {
73
74 test01();
75
76
77 system("pause");
78
79 return 0;
80
81 }

C++ //多态 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 //动态多态:派生类和虚函数实现运行时多态的更多相关文章
- C++基类、派生类、虚函数的几个知识点
1.尽管派生类中含有基类继承来的成员,但派生类初始化这部分变量需要调用基类的构造函数. class A { private: int x; virtual void f(){cout<<& ...
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
动态类型与静态类型 静态类型 是指不需要考虑表达式的执行期语义,仅分析程序文本而决定的表达式类型.静态类型仅依赖于包含表达式的程序文本的形式,而在程序运行时不会改变.通俗的讲,就是上下文无关,在编译时 ...
- C++:成员运算符重载函数和友元运算符重载函数的比较
5.2.4 成员运算符重载函数和友元运算符重载函数的比较 (1)对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中有两个参数:对于单目运算符而言,成员运算符重载函数 ...
- C++:运算符重载函数之友元运算符重载
5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算 ...
- C++基础 学习笔记五:重载之运算符重载
C++基础 学习笔记五:重载之运算符重载 什么是运算符重载 用同一个运算符完成不同的功能即同一个运算符可以有不同的功能的方法叫做运算符重载.运算符重载是静态多态性的体现. 运算符重载的规则 重载公式 ...
- 深入浅出OOP(三): 多态和继承(动态绑定/运行时多态)
在前面的文章中,我们介绍了编译期多态.params关键字.实例化.base关键字等.本节我们来关注另外一种多态:运行时多态, 运行时多态也叫迟绑定. 运行时多态或迟绑定.动态绑定 在C#语音中,运行时 ...
- [置顶] operator overloading(操作符重载,运算符重载)运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy)
operator overloading(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...
- C++ - 虚基类、虚函数与纯虚函数
虚基类 在说明其作用前先看一段代码 class A{public: int iValue;}; class B:public A{public: void bPrintf(){ ...
- C++ 类中有虚函数(虚函数表)时 内存分布
虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的.简称为V-Table.在这个表中,主是要一个类的虚函数的地址表 ...
随机推荐
- kube-controller-manager源码分析-AD controller分析
kubernetes ceph-csi分析目录导航 概述 kube-controller-manager组件中,有两个controller与存储相关,分别是PV controller与AD contr ...
- windows下Docker Desktop安装管理
检查要求 Windows 10 企业版.专业版或教育版 (必须windows10 1903版本以上)版本号 18362.1049+ 或 18363.1049+ ,次版本#大于.1049.最好是最新版( ...
- release模式下打断点调试 配置选项
最近调试一个离职的同事留下的工程,DEBUG模式下顺利,RELEASE的时候就崩溃了,显示为"帧不在模块中"--简直一头雾水 于是我修改配置,为了能够在Release模式中打断点调 ...
- Gym 101206L Daylight Saving Time 根据年月日计算星期
题意: [3月的第二个周日02:00:00 , 3月的第二个周日03:00:00) 这个区间都不是PST或PDT,[11月的第一个周日01:00:00 , 11月的第一个周日02:00:00) 这个区 ...
- Redis 过期时间解析
文章参考:<Redis 设计与实现>黄建宏 设置过期时间 通过 EXPIRE 或者 PEXPIRE 命令,客户端可以以秒或毫秒精度为数据库中的某个键设置生存时间 TTL (Time To ...
- drf-路由和认证
目录 一.路由Routers SimpleRouter DefaultRouter action的使用 二.认证 认证的写法 认证源码分析 认证组件的使用 一.路由Routers 在 Rest Fra ...
- SonarQube 概述与安装
SonarQube 概述 是一种自动代码审查工具,用于检测代码中的错误.漏洞和代码异味.它可以与您现有的工作流程集成,以支持跨项目分支和拉取请求的持续代码检查. 在一个典型的开发过程中 开发人员在 I ...
- 重新整理 .net core 实践篇————缓存相关[四十二]
前言 简单整理一下缓存. 正文 缓存是什么? 缓存是计算结果的"临时"存储和重复使用 缓存本质是用空间换取时间 缓存的场景: 计算结果,如:反射对象缓存 请求结果,如:DNS 缓存 ...
- 23 shell 进程替换
0.shell进程替换的用法 1.使用进程替换的必要性 2.进程替换的本质 进程替换和命令替换非常相似.命令替换是把一个命令的输出结果赋值给另一个变量,例如dir_files=`ls -l`或date ...
- postgresql分组后获取第一条数据
-- 根据编号分组取第一条数据 select * from table t where t.no=(select max(no) from table t1 where t1.no=t.no) -- ...