БлогNot. QT: Как переопределить конвейерные операторы для своего класса

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

теги: программирование c++ qt

18.02.2019, 18:12; рейтинг: 192