定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。在主函数中声明一个DerivedClass的对象,分别用DerivedClass的对象以及BaseClass和DerivedClass的指针来调用fn1(),fn2(),观察运行结果。
主函数如下:
int main()
{
DerivedClass dc;
BaseClass *pb = &dc;
DerivedClass *pd = &dc;
dc.fn1();
dc.fn2();
pb->fn1();
pb->fn2();
pd->fn1();
pd->fn2();
}
【输入形式】
无
【输出形式】
程序的输出结果为:
DerivedClass:fn1()
DerivedClass:fn2()
BaseClass:fn1()
BaseClass:fn2()
DerivedClass:fn1()
DerivedClass:fn2()
#include <iostream>
using namespace std;
class BaseClass {
public:
void fn1() {
cout << "BaseClass: fn1()" << endl;
}
void fn2() {
cout << "BaseClass: fn2()" << endl;
}
};
class DerivedClass : public BaseClass {
public:
void fn1() {
cout << "DerivedClass: fn1()" << endl;
}
void fn2() {
cout << "DerivedClass: fn2()" << endl;
}
};
int main() {
DerivedClass dc;
BaseClass *pb = &dc;
DerivedClass *pd = &dc;
dc.fn1();
dc.fn2();
pb->fn1();
pb->fn2();
pd->fn1();
pd->fn2();
return 0;
}
这是因为在派生类中重写了基类的成员函数,因此在对象调用这些函数时,会根据对象的类型调用对应的函数。但是通过指针访问成员函数时,会根据指针的类型来确定调用的函数,所以在第三、四行中通过基类指针调用的是基类的函数,而在第五、六行中通过派生类指针调用的是派生类的函数。