Как сделать класс в C ++, чтобы он действовал как нативный класс int

Я изучаю C ++ и узнал, что int-типы — это просто готовые классы. Поэтому я подумал, может быть, я должен попытаться создать его.

То, что я хочу сделать в основном это
нормальный класс int

int x;
x=7;
cout << x;

// Вывод 7 на экране.

так же …

abc x;
x=7;
cout << x;

Что бы я положил в

class abc{
\\ HERE!!!!!!
};

чтобы я мог сделать это

class SomeClass {
public:
int x;

SomeClass(int x) {
this->x = x;
}
};

int main(int argc, char *argv[]) {
SomeClass s = 5;

cout << s.x << "\n"; // 5

s = 17;

cout << s.x << "\n"; // 17

return 0;
}

Но, как вы можете видеть, я должен использовать s.x для вывода значения — я просто хочу использовать ‘s’.
Я делаю это в качестве эксперимента, я не хочу слышать о том, насколько этот метод хорош или плох, бессмысленен или революционен, или не может быть сделано. Я помню, как однажды я это сделал. Но только копируя и вставляя код, который я не до конца понял и о котором даже забыл.

1

Решение

и узнал, что int, types, это просто готовые классы

Это совершенно неверно. Тем не менее, вы имеете полный контроль над тем, как ваш класс будет вести себя в выражениях, поскольку вы можете перегрузить (почти) любой оператор. То, что вы упускаете здесь, это обычное operator<< перегрузка, которая вызывается, когда вы делаете:

cout<<s;

Вы можете создать это так:

std::ostream & operator<<(std::ostream & os, const SomeClass & Right)
{
Os<<Right.x;
return Os;
}

Для получения дополнительной информации см. Часто задаваемые вопросы о перегрузке оператора.

4

Другие решения

Вам нужно перегрузить operator<< для вашего класса, вот так:

class abc
{
public:
abc(int x) : m_X(x) {}

private:
int m_X;

friend std::ostream& operator<<(std::ostream& stream, const abc& obj);
};

std::ostream& operator<<(std::ostream& os, const abc& obj)
{
return os << obj.m_X;
}

Вам не нужно friend ваш operator<< Перегрузка, если вы не хотите получить доступ к защищенным / закрытым членам.

2

<< и >> в основном имена функций. Вы должны определить их для своего класса. то же самое с +, -, * и всеми другими операторами. вот как:

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

1

Вы хотите перегрузить оператор вывода:

std::ostream& operator<< (std::ostream& out, SomeClass const& value) {
// format value appropriately
return out;
}
0

Вы должны определить в своем классе abc оператор приведения к int и оператор присваивания из int, как в этом шаблонном классе:

template <class T>
class TypeWrapper {
public:
TypeWrapper(const T& value) : value(value) {}
TypeWrapper() {}
operator T() const { return value; }
TypeWrapper& operator (const T& value) { this->value = value; return *this; }
private:
T value;
};

int main() {
TypeWrapper<int> x;
x = 7;
cout << x << endl;
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector