Подтвердить что ты не робот

Класс С++ "Объект"

В Java существует общий класс, называемый "Object", в котором все классы являются подклассом. Я пытаюсь создать связанную библиотеку списков (для школьного проекта), и мне удалось заставить ее работать только для одного типа, но не несколько, так что похоже на что-то подобное?

EDIT: я бы опубликовал код, но на данный момент у меня его нет.

4b9b3361

Ответ 1

Нет базового базового класса в С++, no.

Вы можете реализовать свои собственные и вывести из него свои классы, но вам нужно сохранить коллекции указателей (или умных указателей), чтобы воспользоваться полиморфизмом.

EDIT: после повторного анализа вашего вопроса я должен указать std::list.

Если вам нужен список, который вы можете специализировать на нескольких типах, вы используете шаблоны (и std::list является шаблоном):

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

Если вам нужен список, который может содержать разные типы в одном экземпляре, вы берете подход базового класса:

std::list<Base*> x;

Ответ 2

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


};

Затем создайте подкласс этого класса