使用字符串时多态性无法覆盖

Polymorphism can't override when using string

Polymorphism 在 dec C 中,不适用于字符串

我正在使用Dev C++ 5.9.2.

我有一个 parent class A, class B,C,D,E.....extends A 和 class list 是我使用 B,C,D.

的主要 class

我不使用 parent A ,因为我想重用构造函数 A.

问题如下

class A
{
    public:
    virtual void show(){
            printf("A");
        }
    private:    
    string tokenS;

};

class B :public A
{
    public:
    virtual void show(){
        printf("B:");
       // return 0;
    }
}

class list
{
    public:
        A* getNode(){
           return pta;
        }

        void setNode(B temp){
           this->pta=&temp;
        }
    protected:
    private:
        A *pt1;
};
int main(){
    list ls;
    B b1;
    ls.setNode(b1);
    ls.getNode()->show();
}

if i using string tokenS result :A

if i using char* tokenS result :B:

我不明白,如果我创建class并使用它,我有同样的错误

class Date
{
   // code
};

class A
    {
        public:
        virtual void show(){
                printf("A");
            }
        private:    
        Date day;

    };

 class B :public A
    {
        public:
        virtual void show(){
            printf("B:");
           // return 0;
        }
    }

问题出在这里:

    void setNode(B temp){
       this->pta=&temp;
    }

这会将 pta 设置为指向 temp,但是当函数结束时 temp 不再存在。这是修复它并保留多态性的方法:

class A
{
    public:
    virtual void show(){
            printf("A");
        }
    virtual std::unique_ptr<A> clone() = 0;
    private:    
    string tokenS;

};

class B :public A
{
    public:
    virtual void show(){
        printf("B:");
       // return 0;
    }
    virtual std::unique_ptr<A> clone()
    {
        return std::make_unique<B>(*this);
    }
};

class list
{
    public:
        A& getNode(){
           return *pt1;
        }

        void setNode(A& temp){
           pt1 = temp.clone();
        }
    protected:
    private:
        std::unique_ptr<A> pt1;
};
int main(){
    list ls;
    B b1;
    ls.setNode(b1);
    ls.getNode().show();
}