使用字符串时不能重写多态性

Polymorphism can't override when using string

本文关键字:重写 多态性 不能 字符串      更新时间:2023-10-16

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

我正在使用Dev C++ 5.9.2.

我有一个父类A,类B,C,D,E.....extends A和类list是我使用B,C,D.的主要类

我不使用父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();
}

如果我使用string tokenS结果:A

如果我使用char* tokenS结果:B:

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

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();
}