通过程序举例说明哪些情况下是静态联编(同名隐藏/类型兼容规则),哪些情况下又是动态联编
时间: 2024-03-01 07:49:28 浏览: 24
静态联编(同名隐藏/类型兼容规则)是在编译期间确定函数的调用关系,主要的场景有:
1. 函数重载:当同一作用域内有多个同名函数但参数列表不同,编译器会根据参数列表的类型和数量来确定具体调用哪个函数。
2. 父子类之间的函数重写:当子类重写父类的虚函数时,编译器会在编译期间确定调用哪个函数。
动态联编则是在运行期间根据对象的实际类型确定函数的调用关系,主要的场景有:
1. 虚函数的多态性:当一个虚函数被声明为虚函数时,编译器会将其实现为一个虚函数表(vtable),在运行时根据对象的实际类型来确定调用哪个虚函数表中的函数。
2. 使用函数指针:当使用函数指针调用函数时,编译器无法确定具体调用哪个函数,需要在运行时根据函数指针指向的函数来确定调用哪个函数。
相关问题
22:什么是动态联编,什么是静态联编
动态联编(也称为运行时多态)和静态联编(也称为编译时多态)是面向对象程序设计中的两个概念。
动态联编是指在程序运行时确定具体调用哪个函数。在运行时,程序会根据对象的实际类型来决定所调用的函数。通常情况下,动态联编需要通过虚函数来实现。
静态联编是指在程序编译时就能够确定具体调用哪个函数。在编译时,程序会根据变量或者表达式的静态类型来决定所调用的函数。通常情况下,静态联编需要通过重载来实现。
总的来说,动态联编能够实现更加灵活的多态性,但是需要在运行时进行函数调用,会带来一定的性能损失;静态联编则能够在编译时完成函数调用,性能更高,但是多态性相对较差。
什么是动态联编和静态联编?
动态联编和静态联编都是指在程序运行时如何确定调用哪个函数或程序。
动态联编指在程序运行时根据实际情况确定调用哪个函数或程序,即动态地将函数或程序链接到调用点。在动态联编中,编译器并不知道调用哪个函数,其调用的函数是在程序运行时由操作系统或程序自己决定的。例如,C++中的虚函数就是动态联编的典型例子,程序在运行时根据对象的实际类型确定调用哪个虚函数。
静态联编指在程序编译时确定调用哪个函数或程序,即编译时将函数或程序链接到调用点。在静态联编中,编译器可以通过函数名和参数的类型来准确地确定调用哪个函数。例如,C语言中的函数就是静态联编的典型例子,编译器在编译时就能够确定调用哪个函数。
总之,动态联编是在程序运行时确定调用哪个函数,而静态联编是在程序编译时确定调用哪个函数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)