如何从实例的成员函数之一访问派生类的数据,该成员函数接收指向基类的指针?我有:

    class Base{
        public:
            virtual void compare(Base*)=0;
    };

    class A: public Base{
        int x;
        public:
            A();
            void compare(Base*);
    };

    class B: public Base{
        char c;
        public:
            void compare(Base*);
    };

    A::A(){
        x = 1;
    };

    void A::compare(Base *p){
        cout<< "A's x is " << x << "\n";
        cout<< "Argument's x is " << p->x;
    };

    void B::compare(Base* p){
        cout<< "B's compare() is running\n";
    };

    int main(const int argc, const char *argv[]){
        A a1 = A();
        A a2 = A();
        B b = B();
        a1.compare(&a2);
    }

由于Base没有数据成员x,因此无法使用。在我撰写本文时,我想到通过指向Base接口(interface)类的指针访问派生类的数据成员不是一个好主意。

在我的问题中,我需要将不同的派生类与Base类提供的相同接口(interface)进行比较。 Base的界面必须包含compare(Base*)成员函数。比较实例的方式可能在派生的分类之间有所不同。比较的逻辑显然应该在那些类的成员函数中编码。我应该如何实现该模型?

最佳答案

除非您的派生类共享一些您想通过基类进行比较的通用数据,否则没有简单的解决方案。
例如,除非您的派生类数量很少,否则在每个派生类中进行动态转换都是多余,缓慢且容易出错的。

较大类型的层次结构的一种解决方案是double dispatch

关于c++ - 将指向基类的指针传递给C++中的派生类的成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1903962/

10-11 04:00
查看更多