问题及代码:
#include<iostream> using namespace std; class A { int a; public: A():a(5) {} virtual void print()const //常虚函数 { cout<<a; } }; class B: public A { char b; public: B() { b='E'; } void print() const { cout<<b; } }; void show(A &x) //建立一个A的对象,引用x { x.print(); } int main() { A d1,*p; //建立基类A的对象d1,基类的指针p B d2; //建立派生类B的对象d2 p=&d2; //基类指针对派生类对象取地址 d1.print(); //输出 5 d2.print(); //输出 E p->print(); //输出 E show(d1); //show函数体内调用d1.print();输出 5 show(d2); //show函数体内调用d2.print();输出 E return 0; }
运行结果:
知识点总结:
虚函数的定义 在函数前加上 virtual。
学习心得:
通常情况下,基类指针是不能指向派生类的成员函数的。
所以在这种情况下,C++设置了虚函数这个概念,这样,在派生类中同名的成员函数就可以利用基类的指针进行引用。实现了动态的多态性。
时间: 2024-10-10 16:05:45