定义一个基类 BaseClass,从它派生出类 DerivedClass。BaseClass 有成员函数 fnl()、fn2(),fn1()是虚函数;DerivedClass 也有成员函数 fn1()、fn2()。在主函数中声明一个 DerivedClass 的对象,分别用 BaseClass 和 DerivedClass 的指针指向 DerivedClass的对象,并通过指针调用 fn1()、fn2(),观察运行结果
时间: 2023-07-16 22:11:50 浏览: 257
基类与派生类(类base派生两个类)
代码实现如下:
```c++
#include<iostream>
using namespace std;
class BaseClass {
public:
virtual void fn1() {
cout << "BaseClass::fn1()" << endl;
}
virtual void fn2() {
cout << "BaseClass::fn2()" << endl;
}
void fnl() {
cout << "BaseClass::fnl()" << endl;
}
};
class DerivedClass : public BaseClass {
public:
void fn1() {
cout << "DerivedClass::fn1()" << endl;
}
void fn2() {
cout << "DerivedClass::fn2()" << endl;
}
};
int main() {
DerivedClass obj;
BaseClass* pBase = &obj;
DerivedClass* pDerived = &obj;
pBase->fn1();
pBase->fn2();
pBase->fnl();
pDerived->fn1();
pDerived->fn2();
pDerived->fnl();
return 0;
}
```
输出结果为:
```
DerivedClass::fn1()
BaseClass::fn2()
BaseClass::fnl()
DerivedClass::fn1()
DerivedClass::fn2()
BaseClass::fnl()
```
从输出结果可以看出,通过 BaseClass 的指针调用 fn1() 函数时,实际上是调用了 DerivedClass 中重写(override)了 fn1() 的版本,而通过 DerivedClass 的指针调用 fn2() 函数时,则是调用了 DerivedClass 自己的 fn2() 函数。同时,无论是通过 BaseClass 的指针还是 DerivedClass 的指针调用 fnl() 函数,结果都是调用了 BaseClass 中的 fnl() 函数,因为它不是虚函数,不会产生多态。
阅读全文