C++ “Object” class

前端 未结 2 1106
死守一世寂寞
死守一世寂寞 2021-02-05 07:27

In Java, there is a generic class called \"Object\", in which all classes are a subclass of. I am trying to make a linked list library (for a school project), and I have managed

相关标签:
2条回答
  • 2021-02-05 07:54
    class Object{
    protected:
        void * Value;
    public:
    
    
    
    template <class Type>
    void operator = (Type Value){
            this->Value = (void*)Value;
    }
    
    template <>
    void operator = <string>(string Value){
            this->Value = (void*)Value.c_str();
    }
    
    template <class Type>
    bool operator ==  (Type Value2){
            return (int)(void*)Value2==(int)(void*)this->Value;
    }
    
    template<>
    bool operator == <Object> (Object Value2){
            return Value2.Value==this->Value;
    }
    
    template <class ReturnType>
    ReturnType Get(){
        return (ReturnType)this->Value;
    }
    
    template <>
    string Get(){
        string str = (const char*)this->Value;
        return str;
    }
    
    template <>
    void* Get(){
    
        return this->Value;
    }
    
    void Print(){
        cout << (signed)this->Value << endl;
    }
    
    
    };
    

    Then make a subclass of it

    0 讨论(0)
  • 2021-02-05 08:10

    There's no generic base class in C++, no.

    You can implement your own and derive your classes from it, but you have to keep collections of pointers (or smart pointers) to take advantage of polymorphism.

    EDIT: After re-analyzing your question, I have to point out std::list.

    If you want a list which you can specialize on multiple types, you use templates (and std::list is a template):

    std::list<classA> a;
    std::list<classB> b;
    

    If you want a list which can hold different types in a single instance, you take the base class approach:

    std::list<Base*> x;
    
    0 讨论(0)
提交回复
热议问题