Класс С++ "Объект"
В Java существует общий класс, называемый "Object", в котором все классы являются подклассом. Я пытаюсь создать связанную библиотеку списков (для школьного проекта), и мне удалось заставить ее работать только для одного типа, но не несколько, так что похоже на что-то подобное?
EDIT: я бы опубликовал код, но на данный момент у меня его нет.
Ответы
Ответ 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;
}
};
Затем создайте подкласс этого класса