首页 > 编程语言 >C++之多态

C++之多态

时间:2022-08-26 23:58:17浏览次数:53  
标签:联编 void 多态 C++ 静态 speak

C++之多态

1 静态联编和动态联编

C++支持编译时多态(静态多态)和运行时多态(动态多态)。运算符重载和函数重载就是编译时多态,而派生类和虚函数就是运行时多态。

静态多态和动态多态的区别就是函数地址是早绑定的(静态联编)还是晚绑定的(动态联编)。
静态联编案例:

class Animal {
public:
	void speak() {
		cout << "动物在说话" << endl;
	}
};
class Cat : public Animal {
public:
	void speak() {
		cout << "小猫在喵喵地叫..." << endl;
	}
};
// 调用doSpeak的时候, 在编译阶段就找animal类型
// speak函数的地址 早就绑定好了  静态联编  编译阶段就确定好了地址 
void doSpeak(Animal &animal) {
	animal.speak();  //输出  动物在说话
}

void test01() {
	Cat cat;
	doSpeak(cat);
}

如果想调用猫的speak , 就不能提前绑定好函数的地址了,所以需要在运行时候,再去确定函数地址,这就叫动态联编。

标签:联编,void,多态,C++,静态,speak
From: https://www.cnblogs.com/lofly/p/16629605.html

相关文章

  • C++:理论基础篇
    class类特性封装:多态:继承:工厂函数 const与#define的区别const用来定义常量、修饰函数参数、修饰函数返回值,可以避免被修改,提高程序的健壮性define是宏定义,在......
  • C++课程设计题
    C++课程设计题题目列表:一、简单计算器的设计问题描述简单计算器的基本功能如下:四则运算,例如加减乘除等;除了整数的运算也可实现小数的各类运算;判断非法操作,例如判定......
  • Xmake v2.7.1 发布,更好的 C++ Modules 支持
    Xmake是一个基于Lua的轻量级跨平台构建工具。它非常的轻量,没有任何依赖,因为它内置了Lua运行时。它使用xmake.lua维护项目构建,相比makefile/CMakeLists.txt,配置语......
  • c++实现通讯录管理系统
    利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄,联系电话、家庭住址)最多记录1000人显示联系人:显......
  • 关于c++的一些好玩的
    #defineA(x) #x:将x转换为字符串。#defineA(x) va##x:将x拼接在变量名后。next_permutation(a+1,a+n+1):把a数组变成字典序下一位,最大则变成最小的。random_s......
  • C++ 内联函数
    1.函数的作用:避免重复制造轮子。(避免重复多次写相同的代码)2.函数的缺点:每调用一次函数,就会为这个函数分配一个“栈”,在计算机底层做很多准备工作(保护原来的执行环境,切换......
  • Windows c++获取磁盘剩余容量
    ULARGE_INTEGERfreeBytesAvailable;ULARGE_INTEGERtotalNumberOfBytes;//磁盘总字节ULARGE_INTEGERtotalNumberOfFreeBytes;//空闲字节GetDiskFreeSpa......
  • arduino自定义库c与c++的区别
    起初是想把手头的红牛开发板的基于stm32标准库的例子都改成用arduino库的   发现arduino库是基于hal库的 不是直接把c文件挪过来就能用的arduino是c++编译器 如......
  • C++入门第一课 函数声明与定义
    函数的声明:如:voidLog(constchar*message);1,在C++中,函数原型就是函数的声明。函数声明就是给函数取名并指定函数的参数类型,返回值类型。告诉编译器有这么一个可使用的......
  • 混合编程:如何用pybind11调用C++
    摘要:在实际开发过程中,免不了涉及到混合编程,比如,对于python这种脚本语言,性能还是有限的,在一些对性能要求高的情景下面,还是需要使用c/c++来完成。本文分享自华为云社区《混......