QT: Как переопределить конвейерные операторы для своего класса
То есть, заставить консольное приложение QT печатать в консоль объекты вашего класса (в моём примере - myclass
) и, наоборот, ожидать ввода значений полей класса из stdin
, используя при этом стандартные "конвейерные" операторы <<
и >>
Самым адекватным (навскидку) мне показался показанный ниже способ с применением QTextStream
. Проверено в QT 5.10.1 с применением шаблона "Консольное приложение Qt".
Файл .pro
QT += core widgets QT -= gui TARGET = Console01 CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp \ myclass.cpp HEADERS += myclass.h
Заголовочный файл класса myclass.h
#ifndef MYCLASS_H #define MYCLASS_H #include <iostream> #include <fstream> #include <cstdio> #include <QTextStream> class myclass { private: int a,b; public: myclass(int,int); friend QTextStream & operator << (QTextStream & out, const myclass &u); friend QTextStream & operator >> (QTextStream & out, myclass &u); }; #endif // MYCLASS_H
Файл класса myclass.cpp
#include "myclass.h" myclass::myclass(int a=0, int b=0) { this->a = a; this->b = b; } QTextStream & operator << (QTextStream &out, const myclass &u) { out << u.a << "," << u.b; return out; } QTextStream & operator >> (QTextStream & out, myclass &u) { out >> u.a >> u.b; return out; }
Файл main.cpp
#include "myclass.h" int main() { myclass obj(1,2); std::cout << "Enter a,b: "; QTextStream ifstream(stdin); ifstream >> obj; QTextStream ofstream(stdout); ofstream << obj; return 0; }
18.02.2019, 18:12 [1856 просмотров]