C++多态的概念及前提条件
在前面的所有列举的程序中,函数的入口地址与函数名是在编译时进行绑定的,我们称之为编译期绑定,而多态的功能则是将函数名动态绑定到函数入口地址,这样的动态绑定过程称为运行期绑定。编译期绑定是指在程序编译时就将函数名与函数入口地址绑定到一起,运行期绑定是指在程序运行时才将函数名与函数入口地址绑定到一起,而在运行期绑定的函数我们称其是多态的。
#include<iostream>
using namespace std;class base
{
public:void display(){cout<<"I'm base class!"<<endl;}
};class derived: public base
{
public:void display(){cout<<"I'm derived class!"<<endl;}};int main()
{base * p;derived test;p = &test;p->display();return 0;
}
此程序最终运行结果如下:
I’m base class!
很显然这个和我们想要的不一样,因为我们指向的test是派生类创建的对象,我们希望它指向派生类的函数。于是,C++提供了多态这一种机制。
要想形成多态必须具备以下三个条件:
- 必须存在继承关系;
- 继承关系中必须有同名的虚函数;
- 存在基类类型的指针或引用,通过该指针或引用调用虚函数。
#include<iostream>
using namespace std;class base
{
public:virtual void display(){cout<<"I'm base class!"<<endl;}
};class derived: public base
{
public:virtual void display(){cout<<"I'm derived class!"<<endl;}};int main()
{base * p;derived test;p = &test;p->display();return 0;
}
这段程序最终运行结果如下:
I’m derived class!
C++多态的概念及前提条件相关推荐
- Java 中多态的概念以及前提条件
多态的概念 * 一个事物在不同时刻的体现(堆内存中对象形式) * 多态的前提条件: * 1)必须有继承关系(继承的好处第三点作为多态的前提条件) * 如果没有继承谈不上多态 * 2) ...
- C++多态的概念及前提条件(最精辟)
原文链接 在 C++ 程序中,每一个函数在内存中会分配一段存储空间,存储空间的起始地址则为函数的入口地址.例如我们在设计一个程序时都必须为程序设计一个主函数,主函数同样会在内存中被分配一段存储空间,这 ...
- 程序基石系列之C++多态的前提条件
准备知识 C++中多态(polymorphism)有以下三个前提条件: 必须存在一个继承体系结构. 继承体系结构中的一些类必须具有同名的virtual成员函数(virtual关键字) 至少有一个基类类 ...
- 面向对象简答题:多态的前提条件?
多态的前提条件? 答:多态的前提条件是: (1)有继承关系. (2)有方法的重写. (3)有父类引用指向之类对象. 备注:这是多态的三大要素,其实多态的前提条件只要(1)和(3)就行,但是教科书上都这 ...
- 说说多态是什么,多态的前提条件是什么?
多态的体现是父类引用变量可以指向子类对象,在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法;多态的前提条件是有子父类关系或者类实现接口的关系.
- JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例...
JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第三个特征,何谓多态 ...
- Java:多态的概念和案例实现
一.多态的概念 多态性是指同一个操作作用于某一类对象,可有不同的解释,产生不同的执行结果 多态存在的三个必要条件 需要存在继承或实现关系 同样的方法调用而执行不同的操作 ...
- 自动化测试实施的前提条件
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较.在此过程中,为了节省人 ...
- Docker的安装与基本使用(一)---使用Docker的前提条件和三要素
使用Docker的前提条件和三要素 1. 提前说明 1.1 在CentOS安装Docker 1.2 前提条件 1.3 查看自己的内核版本 2. Docker的基本组成 2.1 镜像(Image) 2. ...
最新文章
- Android GUI之View测量
- 台湾国立大学郭彦甫Matlab教程笔记(9) basic plotting
- 2.1 Java程序的构成
- (11) nginx + keepalived 双机热备
- LinkedHashMap实现LRU缓存算法
- JavaScript学习笔记——事件
- RHEL-用户基础-管道
- elasticsearch 请求全部数据
- 分享个短视频竞品分析报告
- 百度贴吧诱导用户操作CPA项目
- 简单matlab仿真实例教程,simulink仿真教程
- 一个数根号3怎样用计算机计算,手机计算器怎样打出根号3
- oracle函数 isex,求一条sql话语,按条件查询过期的客户信息
- LinuxC:锁、条件变量、信号量实现线程间的同步 生产者与消费者 pthread_mutex_init pthread_cond_init sem_init
- 漫谈程序员系列:群星闪耀的黄金时代
- blender 2.8 python bpy 编写脚本操作物体
- signature=c0ffabca9db77bd424cc24014d68327f,交易加速
- 系统集成15真题解析
- AMS1117接线图
- 如何配置java环境变量?