C++虚函数与动态联编

本文探讨了C++中的静态联编与动态联编,重点解析虚函数的概念、特点和工作原理。虚函数使得C++实现多态性,通过动态联编在运行时确定调用哪个函数。每个含有虚函数的类会有一个虚函数表(vtbl),对象通过vtbl找到对应函数的地址进行调用,增加了时间和空间成本。虚函数的正确使用能提高代码的灵活性和可扩展性。
摘要由CSDN通过智能技术生成

静态联编和动态联编

       编译器将源代码中的函数调用解释为执行特定的函数代码块,这一行为被称为函数名联编(binding)。联编行为发生在编译过程中则被称为静态联编(static binding),又称为早期联编(early binding)。然而,虚函数使这项工作变得更困难。虚函数的特点使得程序使用哪一个函数是不能再编译时确定的,因为编译器不知道用户将选择哪一种类型的对象。所以,编译器必须生成能够在程序运行时选择正确的虚函数的代码,这被称为动态联编(dynamic binding),又称为晚期联编(late binding)。

 

虚函数

定义

       虚函数是实现C++多态性的重要一环。在C++继承中,如果一个基类的派生类需要重载基类的成员函数,在基类中将这个预期在派生类中要重载的成员函数定义为虚函数,就可以做到这一点。

#include<iostream>

class A
{
public:
    virtual void print (void){std::cout << "This is A\n";};
    A (){};
    virtual ~A (){};
};

class a : public A
{
public:
    void print (void){std::cout << "This is a\n";};
    a (){};
    virtual ~a (){};
};

int main (void)
{
    A *p = new A;
    p->print();
    p = new a;
    p-
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值