后期绑定函数调用在运行时解决。因此,编译器在运行时确定对象的类型,然后绑定函数调用。
虚拟函数规则
#include <iostream> using namespace std; class A { int x=5; public: void display() { std::cout << "Value of x is : " << x<<std::endl; } }; class B: public A { int y = 10; public: void display() { std::cout << "Value of y is : " <<y<< std::endl; } }; int main() { A *a; B b; a = &b; a->display(); return 0; }
输出:
Value of x is : 5
在上面的示例中,* a是基类指针。指针只能访问基类成员,而不能访问派生类的成员。尽管C++允许基指针指向从基类派生的任何对象,但是它不能直接访问派生类的成员。因此,需要允许基指针访问派生类成员的虚函数。
让我们看一下用于在程序中调用派生类的C++虚拟函数的简单示例。
#include <iostream> { public: virtual void display() { cout << "Base class is invoked"<<endl; } }; class B:public A { public: void display() { cout << "Derived Class is invoked"<<endl; } }; int main() { A* a; //基类指针 B b; //派生类的对象 a = &b; a->display(); //后期绑定发生 }
输出:
Derived Class is invoked
纯虚函数可以定义为:
virtual void display() = 0;
让我们看一个简单的示例:
#include <iostream> using namespace std; class Base { public: virtual void show() = 0; }; class Derived : public Base { public: void show() { std::cout << "Derived class is derived from the base class." << std::endl; } }; int main() { Base *bptr; //Base b; Derived d; bptr = &d; bptr->show(); return 0; }
输出:
Derived class is derived from the base class.
在上面的示例中,基类包含纯虚函数。因此,基类是抽象基类。我们无法创建基类的对象。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)