C++的virtual到底是怎么作用的,它在内部是怎么处理的?

#include<iostream>
using namespace std;
class A{
public:
void fun()
{
cout << "A::fun" << endl;
}
void show()
{
fun();
}
};
class B : public A
{
public:
void fun()
{
cout << "B::fun" << endl;
}
void show()
{
fun();
}
};
void test(A *a)
{
a->fun();
a->show();
}
int main()
{ B b;
A a;
b.show();
test(&b);
system("pause");
return 0;
}

输出结果很明显:
B::fun
A::fun
A::fun

然后在A类里的show函数前加virtual
结果:
B::fun
A::fun
B::fun

然后在A类的fun函数前加virtual
结果:
B::fun
B::fun
B::fun
虽然这些结果我都知道
但是我却不知道这个virtual是怎么作用的
它的原理是很么?
麻烦大家可以回答一下么
谢谢了

virtual就是告诉编译器这是一个虚函数 编译器就会延迟绑定,在运行时从虚表里找到这个A*指针真正的对象是B类型,从而调用B的fun函数。你可以读一下《深入探索C++对象模型》,此书不读你就不是搞C++的!
温馨提示:内容为网友见解,仅供参考
无其他回答

C++的virtual到底是怎么作用的,它在内部是怎么处理的?
virtual就是告诉编译器这是一个虚函数 编译器就会延迟绑定,在运行时从虚表里找到这个A*指针真正的对象是B类型,从而调用B的fun函数。你可以读一下《深入探索C++对象模型》,此书不读你就不是搞C++的!

C++中的virtual关键字是什么?怎么用?
virtual是定义C++中虚函数的关键字 。1、virtual关键字的作用:c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定为虚函数;第二,通过基类类型的引用或指针调用。由此可见,virtual主要功能是实现动态绑定。2、virtual关键字的使用情况:virtual可用来定义类函数和应用到虚继...

c++ virtual有什么作用
virtual主要是为了以后能实现它。主要是为了继承。如果函数加virtual,而函数没写实现,那么这个类不能创建实体,必须要子类里面实现这个函数才能创建子类。你可以搜索下虚函数了解下。

C++中virtual关键字的用法
虚拟函数在C++中扮演着核心角色,特别是在面向对象编程的上下文中。当一个类包含有被`virtual`关键字标记的函数时,表示该函数是一个虚函数,其行为受到多态性的影响。多态性是允许函数在不同的对象类型上表现出不同行为的能力。1、虚函数的应用与区别于重载 在分析虚函数时,首先需要明确它与函数重载的...

关键字virtual在C++中是什么意思,有什么用途?
virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。默认情况下,方法是非虚拟的。不能...

C++基础-关键字virtual
当使用到基类的指针或引用来处理派生类时,对被覆盖的虚函数的调用,将会调用定义于派生类中的行为。当使用有限定名字查找(即函数名出现在作用域解析运算符 :: 的右侧)时,此行为被抑制。若某个成员函数 vf 在类 Base 中被声明为 virtual,且某个直接或间接派生于 Base 的类 Derived 拥有一个下列...

C++中的virtual关键字是什么?怎么用?
virtual是定义C++中虚函数的关键字 。在使用virtual之前,C++对成员函数使用静态联编,而使用virtual,并且在调用函数时是通过指针或引用调用,C++则对成员函数进行动态联编。用法:class Base { public:Base(){} public:virtual void print(){cout<<"Base";} };class Derived:public Base { public:...

C++中的virtual关键字是什么?怎么用?
Virtual是C++ OO机制中很重要的一个关键字,在类Base中加了Virtual关键字的函数就是虚拟函数。关键字Virtual的用法:include<iostream> using namespace std;class A{ public:virtual void display(){ cout<<"A"<<endl;} };class B :public A{ public:void display(){ cout<<"B"<<endl;} };...

C++ Virtual详解
Virtual是C++ OO(面向对象机制)机制中很重要的一个关键字。虚函数就是因为成员函数加了关键字virtual,可见它的重要性。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类...

关于C++ Virtual 关键字的一切(1):虚函数的内部原理是什么?
在C++中,"关于C++ Virtual关键字的一切(1):虚函数的内部原理"系列文章深入剖析了虚函数的核心机制,特别是动态调度(dynamic dispatch)。文章以连接手机网络的比喻展开,解释了为何需要这种功能,即在抽象层面上,不同的通信协议(如Wifi和蓝牙)需要共享一些通用步骤,如身份认证和连接。虚函数的关键...

相似回答
大家正在搜