#include <iostream>using namespace std;class Base { int b;public: Base(int i): b(i) {} virtual void who() { cout << "Base Class" << endl; } void print() { cout << "Member of Base is " << b << endl; }};class D1: public Base { int d;public: D1(int i, int j): Base(i), d(j) {} virtual void who() { cout << "D1 Class" << endl; } virtual void print() { cout << "Member of D1 is " << d << endl; }};class D2: public Base { int d;public: D2(int i, int j): Base(i), d(j) {} virtual void who() { cout << "D2 Class" << endl; } virtual void print() { cout << "Member of D2 is " << d << endl; }};int main() { Base b1(1), *p; D1 obj2(2, 3); D2 obj3(4, 5); p = &b1; p->who(); p = &obj2; p->who(); p->print(); p = &obj3; p->who(); p->print(); obj3.print(); return 0;}
时间: 2024-04-26 20:22:28 浏览: 132
#include <iostream>
这段程序的作用是定义了一个基类 Base 和两个派生类 D1 和 D2,然后在 main 函数中分别创建了一个 Base 类对象 b1 和两个派生类对象 obj2 和 obj3,并通过指针 p 对它们进行了调用。
在调用中,首先将指针 p 指向了 b1,然后调用了 p 的虚函数 who,所以输出了 "Base Class"。接着将指针 p 指向了 obj2,调用了 p 的虚函数 who,所以输出了 "D1 Class"。然后又调用了 p 的虚函数 print,所以输出了 "Member of D1 is 3"。接着将指针 p 指向了 obj3,调用了 p 的虚函数 who,所以输出了 "D2 Class"。然后又调用了 p 的虚函数 print,所以输出了 "Member of D2 is 5"。最后直接调用了 obj3 的 print 函数,输出了 "Member of D2 is 5"。
可以看出,这段程序通过虚函数实现了多态性,可以方便地实现基类和派生类之间的转换和调用。
阅读全文