那默认调用的虚函数是什么
时间: 2023-10-23 15:08:33 浏览: 27
在C++中,当一个虚函数被声明为纯虚函数时,它就变成了一个抽象函数,没有实现体,只有函数原型。如果一个派生类没有实现其基类中的纯虚函数,则该派生类也将成为一个抽象类。抽象类不能被实例化,只能用作其他类的基类,其派生类必须实现其基类中的所有纯虚函数才能被实例化。
当一个纯虚函数被调用时,实际上是在运行时动态绑定到其派生类的实现。因此,默认调用的虚函数是其派生类的实现。如果一个派生类没有实现其基类中的纯虚函数,编译器在链接时会报错,因为该派生类仍然是一个抽象类,不能被实例化。
相关问题
虚函数和纯虚函数的区别是什么?
虚函数和纯虚函数是面向对象编程中的两个重要概念,它们的区别如下:
1. 虚函数(Virtual Function):
虚函数是在基类中声明并使用 virtual 关键字修饰的成员函数。它允许在派生类中重新定义该函数,并通过基类指针或引用调用派生类的实现。虚函数在基类中可以有默认的实现,派生类可以选择重写或继承该实现。
2. 纯虚函数(Pure Virtual Function):
纯虚函数是在基类中声明并使用 virtual 关键字修饰的函数,但没有实际的实现,只有函数的声明。纯虚函数通过在函数声明后面添加 "= 0" 来表示。派生类必须实现纯虚函数,否则派生类也会成为抽象类。抽象类不能被实例化,只能作为基类用于派生其他类。
区别:
1. 实现:虚函数在基类中有默认的实现,派生类可以选择是否重写该函数;而纯虚函数没有实际的实现,派生类必须实现纯虚函数。
2. 抽象类:如果一个类包含纯虚函数,那么它就是抽象类,不能被实例化;而含有虚函数的类可以被实例化。
3. 接口
C++一个指针默认访问对象的虚函数
在C++中,一个指向对象的指针默认访问的是该对象的虚函数。这是由于C++中的虚函数是通过虚函数表来实现的,每个包含虚函数的对象都有一个指向其虚函数表的指针。当一个对象被创建时,其虚函数表被初始化。当通过一个指向对象的指针调用一个虚函数时,实际上是通过该指针所指向的对象的虚函数表来调用正确的虚函数。
如果一个指针指向一个派生类对象,那么通过该指针访问的虚函数将是该派生类实现的虚函数。如果一个指针指向一个基类对象,那么通过该指针访问的虚函数将是其派生类的实现,因为派生类覆盖了基类的虚函数,同时派生类的虚函数表也包含了其继承而来的基类的虚函数。