首页 > 编程语言 >c++ 多态

c++ 多态

时间:2023-01-14 17:44:19浏览次数:36  
标签:函数 vtbl 多态 c++ thing Books hello

一、什么是多态

多态(Polymorphism)源自于希腊语,意思是“多种形状”。在C++中,允许通过基类型的指针引用去访问派生对象中的函数,并允许需要执行的函数在运行时进行延迟绑定(Late binding),这称之为多态。多态的前提条件是继承。

另外, 对于重载(overload)的实现也可称之为多态,只不过发生在静态编译阶段,根据函数参数类型的区别就确定了应该调用的函数。

二、原理

基类中含有virtual 修饰的成员函数,编译器将在内存模型中的添加虚函数表的指针(vptr),其占用sizeof(void *)大小(跟平台相关)。该vptr指向存储在别处的虚函数表(vtbl),vtbl中又存放着类中的虚拟成员函数的地址。

三、示例

#include<iostream>
using namespace std;

class Material_thing{
public:
	virtual void hello(){
		cout<<"Material_thing!"<<endl;
	}
};

class Book: public Material_thing{
public:
	void hello(){
		cout<<"Books!"<<endl;
	}
};

int main(){
	Book book;
	Material_thing thing1 = book;
	Material_thing& thing2 = book;
	Material_thing* pThing = &book;
	
	thing1.hello();
	thing2.hello();
	pThing->hello();
	book.hello();

	return 0;
}

hello Material_thing!
hello Books!
hello Books!
hello Books!

标签:函数,vtbl,多态,c++,thing,Books,hello
From: https://www.cnblogs.com/qiangz/p/15767291.html

相关文章

  • C++学习开发路线
    C++等级:0级:掌握常见C++语法和语言构造,能够顺溜地写清楚各种语言构造(很多小白鼠死在这里)1级:掌握基本的编程范式:面向过程、面向对象、泛型编程、以及C++11/14支持的函数式......
  • c++ 数组
              ......
  • C++立方体类
    #define_CRT_SECURE_NO_WARNINGS1#include<iostream>usingnamespacestd;//一、求出立方体类://1、创建立方体类//2、设计属性//3、设计行为:求出立方体的面积和体积//4、......
  • 希尔排序的思路与C++实现
    tags:DSAC++Sort写在前面写一下希尔排序,其实就是插入排序的升级版,不是一次移动一个,而是一次移动一组.回顾插入排序voidInsertionSort(vector<int>&arr){int......
  • 快速排序算法的递归,迭代法实现(C++)
    tags:DSAC++Sort思路分治法主要分成下面三个步骤:选定基准值(默认是数组首元素),这里称为pivot找到基准值待放置的位置(排序之后的位置),将大于基准值的元素放在基准值......
  • C++ 算法进阶系列之从 Brute Force 到 KMP 字符串匹配算法的优化之路
    1.字符串匹配算法所谓字符串匹配算法,简单地说就是在一个目标字符串中查找是否存在另一个模式字符串。如在字符串ABCDEFG中查找是否存在EF字符串。可以把字符串ABCDE......
  • java中关于继承,多态及方法调用的底层细节
    java中关于继承,多态及方法调用的底层细节一、继承继承已存在的类就是复用(继承)这些类的方法和域。在此基础上,还可以添加一些新的方法和域,以满足新的需求。子类会拥有......
  • C++|开发工具
    前言学习c++就需要有合适的开发工具,本文将介绍如何安装开发工具。一、VisualStudio官网下载进入后,向下划,看到“了解VisualStudio系列”,选择使用于你的电脑操作系......
  • C++利用easyX实现一个简单图形化窗口
    在实现这个图形化窗口过程中遇到了一些琐碎的问题,不过还是解决了首先easyX下载地址https://easyx.cn/download下载之后安装到VS上或者自己想使用的软件上就行1#incl......
  • C++ STL容器的Value语义与Reference语义
    C++STL容器的Value语义与Reference语义1.Value语义vs.Reference语义1.1两种语义简述​ 通常情况下,所有容器都是建立元素的copy,返回的元素的copy。因此,容器内的元素与......