定义一个基类BaseClass,从它派生出类DerivedCalss,BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2(),在主函数中声明一个DerivedCalss的对象,分别用DerivedCalss的对象以及BaseClass和DerivedCalss的指针来调用fn1(),fn2(),观察运行结果。
时间: 2024-03-23 08:39:58 浏览: 70
好的,这是一个关于面向对象编程中继承和多态性的问题。下面是示例代码:
```c++
#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 obj;
BaseClass* ptr1 = &obj;
DerivedClass* ptr2 = &obj;
obj.fn1(); // DerivedClass fn1()
obj.fn2(); // DerivedClass fn2()
ptr1->fn1(); // BaseClass fn1()
ptr1->fn2(); // BaseClass fn2()
ptr2->fn1(); // DerivedClass fn1()
ptr2->fn2(); // DerivedClass fn2()
return 0;
}
```
在这个示例中,我们定义了一个基类 `BaseClass` 和一个派生类 `DerivedClass`。`BaseClass` 有两个成员函数 `fn1()` 和 `fn2()`,`DerivedClass` 同样有两个成员函数 `fn1()` 和 `fn2()`,并且 `DerivedClass` 公开继承自 `BaseClass`。
在主函数中,我们声明了一个 `DerivedClass` 的对象 `obj`,以及指向 `obj` 的基类指针 `ptr1` 和派生类指针 `ptr2`。我们分别用这三种方式来调用 `fn1()` 和 `fn2()`,然后观察运行结果。
由于 `DerivedClass` 重写了 `BaseClass` 的成员函数 `fn1()` 和 `fn2()`,所以在用 `DerivedClass` 的对象 `obj` 调用时,输出的是 `DerivedClass` 的成员函数的内容。而在用 `BaseClass` 的指针 `ptr1` 调用时,由于指针类型的限制,输出的是 `BaseClass` 的成员函数的内容。在用派生类指针 `ptr2` 调用时,也是输出 `DerivedClass` 的成员函数的内容。这就展示了继承和多态性的特性。
阅读全文