问题及代码:
#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++设置了虚函数这个概念,这样,在派生类中同名的成员函数就可以利用基类的指针进行引用。实现了动态的多态性。