C++中关于virtual虚函数的深入用法,有哪些细节和技巧值得探究?

2026-04-19 01:092阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1384个文字,预计阅读时间需要6分钟。

C++中关于virtual虚函数的深入用法,有哪些细节和技巧值得探究?

一、使用virtual修饰基类中的函数,派生类重写该函数:

cppclass Base {public: virtual void Func() { // 基类实现 }};

class Derived : public Base {public: void Func() override { // 派生类重写实现 }};

一、virtual修饰基类中的函数,派生类重写该函数:

#include using namespace std; class A{ public: virtual void display(){ cout<<"A"<<ENDL; } }; class B : public A{ public: void display(){ cout<<"B"<<ENDL; } }; void doDisplay(A *p) { p->display(); delete p; } int main(int argc,char* argv[]) { doDisplay(new B()); return 0; }

这段代码打印出的结果为B,但是当把A类中的virtual去掉之后打印出的就为A。

当基类中没有virtual的时候,编译器在编译的时候把p看做A类的对象,调用的自然就是A类的方法。

但是加上virtual之后,将dispaly方法变成了虚方法,这样调用的时候编译器会看调用的究竟是谁的实例化对象,这样就实现了多态的效果。

阅读全文

本文共计1384个文字,预计阅读时间需要6分钟。

C++中关于virtual虚函数的深入用法,有哪些细节和技巧值得探究?

一、使用virtual修饰基类中的函数,派生类重写该函数:

cppclass Base {public: virtual void Func() { // 基类实现 }};

class Derived : public Base {public: void Func() override { // 派生类重写实现 }};

一、virtual修饰基类中的函数,派生类重写该函数:

#include using namespace std; class A{ public: virtual void display(){ cout<<"A"<<ENDL; } }; class B : public A{ public: void display(){ cout<<"B"<<ENDL; } }; void doDisplay(A *p) { p->display(); delete p; } int main(int argc,char* argv[]) { doDisplay(new B()); return 0; }

这段代码打印出的结果为B,但是当把A类中的virtual去掉之后打印出的就为A。

当基类中没有virtual的时候,编译器在编译的时候把p看做A类的对象,调用的自然就是A类的方法。

但是加上virtual之后,将dispaly方法变成了虚方法,这样调用的时候编译器会看调用的究竟是谁的实例化对象,这样就实现了多态的效果。

阅读全文