用c++编程, 定义一个基类BaseClass, 从它派生出类DerivedClass, BaseClass有成员函数fn1(), fn2(), fn1()是虚函数,DerivedClass也有成员函数fn1(), fn2(), 在main中定义一个DerivedClass的对象,分别用BaseClass和DerivedClass的指针来调用fn1(), fn2()。并逐句解释代码
时间: 2023-11-22 14:05:00 浏览: 71
cg2_基类BaseClass派生出类_noddedc1c_
5星 · 资源好评率100%
好的,以下是C++代码实现:
```c++
#include <iostream>
using namespace std;
class BaseClass {
public:
virtual void fn1() {
cout << "BaseClass::fn1()" << endl;
}
void fn2() {
cout << "BaseClass::fn2()" << endl;
}
};
class DerivedClass : public BaseClass {
public:
void fn1() override {
cout << "DerivedClass::fn1()" << endl;
}
void fn2() {
cout << "DerivedClass::fn2()" << endl;
}
};
int main() {
DerivedClass obj;
BaseClass* pBase = &obj;
DerivedClass* pDerived = &obj;
pBase->fn1(); // 调用 DerivedClass::fn1()
pBase->fn2(); // 调用 BaseClass::fn2()
pDerived->fn1(); // 调用 DerivedClass::fn1()
pDerived->fn2(); // 调用 DerivedClass::fn2()
return 0;
}
```
首先定义了一个基类 `BaseClass`,其中包含了两个成员函数 `fn1` 和 `fn2`。其中 `fn1` 是一个虚函数,表示它可以被派生类覆盖;`fn2` 不是虚函数,表示它不能被派生类覆盖。
接着定义了一个派生类 `DerivedClass`,它是从 `BaseClass` 派生而来的。在 `DerivedClass` 中,我们同样定义了两个成员函数 `fn1` 和 `fn2`,并且使用了 `override` 关键字来标识 `fn1` 覆盖了基类 `BaseClass` 中的 `fn1` 函数。
在 `main` 函数中,我们创建了一个 `DerivedClass` 的对象 `obj`,并且分别用 `BaseClass` 和 `DerivedClass` 的指针来调用它的成员函数。
首先,我们使用 `BaseClass` 的指针 `pBase` 来调用 `fn1` 和 `fn2` 函数。由于 `fn1` 是虚函数,因此会调用 `DerivedClass` 中的 `fn1` 函数,输出 `"DerivedClass::fn1()"`;而 `fn2` 不是虚函数,因此会调用 `BaseClass` 中的 `fn2` 函数,输出 `"BaseClass::fn2()"`。
接着,我们使用 `DerivedClass` 的指针 `pDerived` 来调用 `fn1` 和 `fn2` 函数。由于 `DerivedClass` 中已经覆盖了 `fn1` 函数,因此会调用 `DerivedClass` 中的 `fn1` 函数,同样输出 `"DerivedClass::fn1()"`;而 `fn2` 在 `DerivedClass` 中被重新定义了,因此会调用 `DerivedClass` 中的 `fn2` 函数,输出 `"DerivedClass::fn2()"`。
综上所述,这段代码展示了虚函数和函数覆盖的用法,以及派生类对基类函数的重新定义。
阅读全文