• 基类指针操作派生类对象时,只能访问虚函数,新增成员无法访问


    #include<bits/stdc++.h>
    using namespace std;
    
    /**
     * 基类指针操作派生类对象时,只能访问虚函数,新增成员无法访问
     * */
    class B {
        int x;
        public:
            B(int i) {
                x = i;
            }
            int getx() {
                return x;
            }
            virtual void f() {
                printf("Base B: x=%d\n", x);
            }
    };
    
    class D1: public B {
        int x;
        public:
            D1(int i): B(i) {
    
            }
            virtual void f() {
                printf("D1 :x=%d\n", getx());
            }
    };
    
    class D2: public B {
        int x;
        public:
            D2(int i): B(i) {
    
            }
            virtual void f() {
                printf("D2 :x=%d\n", getx());
            }
    
            void g() {
                printf("this is D2 own\n");
            }
    };
    // void accessB(B *pb) {
    //     pb->f();
    //     // pb->g(); // 错误,B 中没有 g ,因此无法访问
    // }
    void accessB(B *pb) {
        D2 *p = dynamic_cast<D2 *> (pb); // 如果可以向下转换,那么调用派生类的函数,否则调用基类函数
        if(p) {
            p->g();
        }
        else {
            pb->f();
        }
    }
    int main() {
        B b(1);
        D1 d1(2);
        D2 d2(3);
        accessB(&b);
        accessB(&d1);
        accessB(&d2);
        return 0;
    }
    
  • 相关阅读:
    容斥相关
    动态点分治
    杜教筛
    上下界网络流的理解
    putty securecrt
    借款费用
    在线画图工具
    费用包括(营业成本)和(期间费用)
    信用减值损失
    采用权益法核算的长期股权投资,被投资单位宣告发放现金股利
  • 原文地址:https://www.cnblogs.com/consolexinhun/p/15738408.html
Copyright © 2020-2023  润新知