编译时多态与运行时多态的区别

本文探讨了编译时多态和运行时多态的区别。编译时多态通过函数重载和模板具现化实例实现,而运行时多态依赖基类指针或引用及虚函数,确保在运行时能根据对象实际类型调用相应函数。运行时多态要求虚函数在派生类中保持一致的名称、参数和返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1定义
(1)编译时多态/静态联编
指联编工作在编译阶段完成,即在编译阶段确定了程序中的操作调用与执行该操作的代码间的关系,基于指向对象的指针类型或引用类型。
(2)运行时多态/动态联编
指联编在程序运行时动态进行,对函数的调用基于对象的类型

2区别总结
这里写图片描述

3代码

(1)编译时多态
1)函数重载

//编译时多态,函数调用与**指针类型**有关。
#include<iostream>
using namespace std;
class A{
    public:
     void print(){
  cout<<"A"<<endl;}//函数重载
};
class B:public A{
    public:
        void print(){
  cout<<"B"<<endl;}//函数重载
};

int main(){
    A *p;//指针p为A类型 
    A a;
    B b;
    p=&a;
    p->print() ;
    p=&b;
    p->print();
    return 0;
}
//输出结果:
A
A

2)模板具现化实例

#include<iostream>
#include<vector> 
using namespace std;
class animal{
    public:
         void voice(){
            cout<<"动物叫声"<<endl; 
        }
}; 
class Cat:public animal{
    public:
        void voice(){
            cout<<"喵喵~"<<endl;
        }
};
class Dog:publi
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值