Я изучаю 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’.
Я делаю это в качестве эксперимента, я не хочу слышать о том, насколько этот метод хорош или плох, бессмысленен или революционен, или не может быть сделано. Я помню, как однажды я это сделал. Но только копируя и вставляя код, который я не до конца понял и о котором даже забыл.
и узнал, что int, types, это просто готовые классы
Это совершенно неверно. Тем не менее, вы имеете полный контроль над тем, как ваш класс будет вести себя в выражениях, поскольку вы можете перегрузить (почти) любой оператор. То, что вы упускаете здесь, это обычное operator<<
перегрузка, которая вызывается, когда вы делаете:
cout<<s;
Вы можете создать это так:
std::ostream & operator<<(std::ostream & os, const SomeClass & Right)
{
Os<<Right.x;
return Os;
}
Для получения дополнительной информации см. Часто задаваемые вопросы о перегрузке оператора.
Вам нужно перегрузить 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<<
Перегрузка, если вы не хотите получить доступ к защищенным / закрытым членам.
<< и >> в основном имена функций. Вы должны определить их для своего класса. то же самое с +, -, * и всеми другими операторами. вот как:
http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html
Вы хотите перегрузить оператор вывода:
std::ostream& operator<< (std::ostream& out, SomeClass const& value) {
// format value appropriately
return out;
}
Вы должны определить в своем классе 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;
}