typeid 识别基类指针所指的实际对象,并进行不同的成员函数调用

#include<bits/stdc++.h>
using namespace std;

/**
 * typeid 识别基类指针所指的实际对象,并进行不同的成员函数调用
 * */
class  B {
    int x;
    public:
        virtual void f() {
            printf(" B  f\n");
        }
};

class D1 : public B {
    public:
        virtual void g() {
            printf(" D1 f\n");
        }
};
class D2: public B {
    int x;
    public:
        virtual void f() {
            printf("D2 f\n");
        }
        void h() {
            printf("D2  h\n");
        }
};

void accessB(B *pb) {
    if(typeid(*pb) == typeid(B)) {
        pb->f();
    }
    else if(typeid(*pb) == typeid(D1)) {
        D1 *d1 = dynamic_cast<D1 *>(pb);
        d1->g();
    }
    else if(typeid(*pb) == typeid(D2)) {
        D2 *d2 = dynamic_cast<D2 *>(pb);
        d2->h();
    }
}
int main() {
    B b;
    D1 d1;
    D2 d2;
    accessB(&b);
    accessB(&d1);
    accessB(&d2);
    return 0;
}
posted @ 2021-12-28 13:30  consolexinhun  阅读(46)  评论(0编辑  收藏  举报