21xrx.com
2024-09-17 04:20:59 Tuesday
登录
文章检索 我的文章 写文章
动态联编在c++中的实现以及调用虚函数的注意事项
2023-07-07 10:32:42 深夜i     --     --
动态联编 c++ 实现 虚函数 注意事项

动态联编在C++中的实现以及调用虚函数的注意事项

动态联编是C++中的一个重要概念,它可以让程序在运行时动态的确定函数的调用地址,从而实现多态和继承等特性。在C++中,动态联编主要是通过虚函数表来实现的。

虚函数表是一个包含各种虚函数地址的数组,它是在编译期间由编译器自动生成的。子类会继承父类的虚函数表,并在自身的虚函数表中添加新的虚函数,并且将重写过的虚函数地址替换父类的虚函数地址。在程序运行时,当调用一个虚函数时,程序会先查找该对象所对应的虚函数表,然后根据虚函数表中保存的地址来调用相应的函数。

要调用虚函数,需要按照以下方式定义:


class base {

public:

  virtual void func();

};

class derived : public base {

public:

  void func() override;

};

在调用虚函数时,需要注意以下几个问题:

1. 虚函数必须被声明为public。如果非public成员函数对外公开,则不会成为虚函数。

2. 所有重写虚函数的子类必须用override关键字,以便编译器检查是否正确实现了该函数。只有在基类和子类中函数名和函数参数匹配的虚函数才能被重写。

3. 如果没有使用虚函数,则会调用基类版本。如果使用了虚函数,但是在衍生类中没有重新定义,则也会调用基类版本。

4. 调用虚函数时,如果使用了指向派生类对象的基类指针或引用,则虚函数的调用方式取决于该指针或引用所指的对象类型。

5. 调用虚函数的代价比非虚函数的略高,因为需要先查找虚函数表,再调用虚函数。

总之,动态联编以及虚函数的使用是C++中重要的特性之一,它可以使程序变得更加灵活和易于扩展。在使用时需要注意各种细节,以充分发挥其作用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复