Здесь два главных класса: класс Поезд и класс Билеты, класс Билеты наследует класс Поезд. Проблема в том, что не могу считать из файла ( в который уже записаны данные ) объекты класса, пыталась разными способами, но всегда какие-то ошибки. Помогите пожалуйста
class Train {// класс, описывающий поезд
protected:
string number;
string path;
string date;
string time;
int cars;
public:
Train() {
number = "-";
path = "-";
date = "--.--.----";
time = "--:--";
cars = 0;
}
void set_train(string number, string path, string date, string time, int cars) {
this->number = number;
this->path = path;
this->date = date;
this->time = time;
this->cars = cars;
}
void ScanTrain() {
cout << "\nВведите сведения о поезде: \nНомер: ";
cin >> number;
cout << endl << "Путь: ";
cin >> path;
cout << endl << "Дата отправления: ";
cin >> date;
cout << endl << "Время отправления: ";
cin >> time;
cout << endl << "Количество вагонов: ";
cin >> cars;
}
string get_train() const {
return "\nНомер поезда: " + number + "\nНаправление движения поезда: " + path + "\nДата отправления: " + date + "\nВремя отправления: " + time + "\nКоличество вагонов: " + to_string(cars);
}
string get_train(string num) const {
if (this->number == num) {
return "\nНомер поезда: " + number + "\nНаправление движения поезда: " + path + "\nДата отправления: " + date + "\nВремя отправления: " + time + "\nКоличество вагонов: " + to_string(cars);
}
else return "Нет такого поезда";
}
//геттеры и сеттеры
void set_number(string number) {
this->number = number;
}
string get_number() const {
return number;
}
void set_path(string path) {
this->path = path;
}
string get_path() const {
return path;
}
void set_date(string date) {
this->date = date;
}
string get_date() const {
return date;
}
void set_time(string time) {
this->time = time;
}
string get_time() const {
return time;
}
void set_cars(int cars) {
this->cars = cars;
}
int get_cars() const {
return cars;
}
} poezd[3];
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Tickets : public Train {
protected:
struct Carriage {//вложенная структура, описывающая вагон поезда
int number_of_carriage;
string type_of_carriage;
int sits;
Carriage() {
number_of_carriage = 0;
type_of_carriage = "-";
sits = 0;
}
void ScanСarriage() {
cout << "\nНомер вагона: ";
cin >> number_of_carriage;
cout << "\nТип вагона: ";
cin >> type_of_carriage;
}
void set_number_of_carriage(int number_of_carriage) {
this->number_of_carriage = number_of_carriage;
}
int get_number_of_carriage() const {
return number_of_carriage;
}
void set_type_of_carriage(string type_of_carriage) {
this->type_of_carriage = type_of_carriage;
}
string get_type_of_carriage() const {
return type_of_carriage;
}
void set_sits(string type_of_carriage) {
if (type_of_carriage == "купе") {
this->sits = 36;
}
if (type_of_carriage == "плацкарт") {
this->sits = 54;
}
if (type_of_carriage == "общий") {
this->sits = 81;
}
}
int get_sits() const {
return sits;
}
};
string price;
////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Info {//вложенный класс, описывающий информацию о пассажире
protected:
string fio;
int sit;
public:
Info() {
fio = "-";
sit = 0;
}
void ScanInfo() {
cout << "\nВведите данные о пассажире: \nФИО: ";
cin >> fio;
cout << "\nМесто: ";
cin >> sit;
}
void set_info(string fio, int sit) {
this->fio = fio;
this->sit = sit;
}
string get_info() const {
return "\nСведения о пассажире: \nФИО: " + fio + "\nМесто: " + to_string(sit);
}
void set_fio(string fio) {
this->fio = fio;
}
string get_fio() const {
return "\nФИО пассажира: " + fio;
}
void set_sit(int sit) {
this->sit = sit;
} //надо понять, когда и где ее вызвать и проверить
int get_sit() const {
cout << "\nМесто: ";
return sit;
}
};
string number;
Train train;
Carriage carriage;
Info data;
public:
void read(ifstream *in) {
in->read((char *)this, sizeof(Tickets));
if (in->fail())
cout << "read failed" << endl;
}
Tickets() {
price = "00p.";
}
Tickets(string number, string path, string date, string time, int cars, int number_of_carriage, string type_of_carriage, int sits, string price,
string fio, int sit) { // конструктор с параметрами
//train.set_train(number, path, date, time);
this->carriage.number_of_carriage = number_of_carriage;
this->carriage.type_of_carriage = type_of_carriage;
this->price = price;
data.set_info(fio, sit);
}
/*Tickets() { // конструктор копирования
}
*/
~Tickets() { // деструктор
//cout << "\nСработал деструктор";
}
/*void deleteObj()
{ //Delete object from list
cout << "Введите номер поезда" << endl;
int temp;
cin >> temp;
bool find;
for (int i = 0; i < size; i++) {
if (temp == ticket[size].getPostavCode()) {
ticket[size].show();
find = true;
g.erase(g.begin() + i);
break;
}
}
if (!find) cout << "Не удалось найти объект для удаления" << endl;
}*/
string get_price(string type_of_carriage, string priceK, string priceP, string priceO) const {
if (type_of_carriage == "Купе") {
return priceK;
}
if (type_of_carriage == "Плацкарт") {
return priceP;
}
if (type_of_carriage == "Общий") {
return priceO;
}
}
void set_price(string price) {
this->price = price;
}
string get_price() const {
return price;
}
/*void writeToFile(string pathtofile) {
ofstream fout(pathtofile, ios_base::app); //запись в файл, ios_base - флаг режима для открытия файла
Train train;
fout << train.number << " " << flower.name << " " << carriage.type_of_carriage << " " << flower.family << " " << flower.country << " " << flower.goden << endl;
fout.close();
}
void output() { //Output to file
cout << "Введите имя файла с расширением" << endl;
cin >> fname;
for (int i = 0; i < garden.n; i++) {
flower.writeToFile(name);
}
}
void input() {
cout << "Введите имя файла с расширением" << endl;
cin >> fname;
ifstream fin(fname); //чтение из файла
int code;
string name;
string type;
string family;
string country;
int goden;
int left;
int code_post;
do {
fin >> code >> name >> type >> family >> country >> goden >> left >> code_post;
} while (!fin.eof());
fin.close();
}*/
//void Scan() {
// string n, p, d, t, f, typec;
// int s, numberc;
// cout << "\nНомер поезда: ";
// cin >> number;
// /*cout << "\nНаправление движения поезда: ";
// cin >> p;
// cout << "\nДата отправления: ";
// cin >> d;
// cout << "\nВремя отправления: ";
// cin >> t;
// train.set_train(n, p, d, t);*/
// cout << "\nНомер вагона: ";
// cin >> carriage.number_of_carriage;
// cout << "\nТип вагона: ";
// cin >> carriage.type_of_carriage;
// cout << "\nЦена билета: ";
// cin >> price;
// cout << "\nФИО пассажира: ";
// cin >> f;
// cout << "\nМесто пассажира: ";
// cin >> s;
// data.set_info(f, s);
//}
//void Print(Train* t) {
// //train.get_train();
// cout << "\nНомер вагона: " << carriage.number_of_carriage
// << "\nТип вагона: " << carriage.type_of_carriage << "\nЦена билета: "
// << price;
// for (int n = 0; n < 10; n++) {
// if(t[n]->)
// }
// data.get_info();
// cout << "\n";
//}
void Print(string number) {
cout << get_train(number);
cout << "\nНомер вагона: " << get_number_of_carriage()
<< "\nТип вагона: " << get_type_of_carriage() << "\nЦена билета: "
<< price;
cout << data.get_info();
cout << "\n";
}
//для train
/*string get_train() const {
return train.get_train();
}
void set_number(string number) {
set_number(number);
}
string get_number() const {
return train.get_number();
}
void set_path(string path) {
set_path(path);
}
string get_path() const {
return train.get_path();
}
void set_date(string date) {
set_date(date);
}
string get_date() const {
return train.get_date();
}
void set_time(string time) {
set_fio(time);
}
string get_time() const {
return train.get_time();
}
*/
//для carriage
void set_number_of_carriage(int number_of_carriage) {
this->carriage.set_number_of_carriage(number_of_carriage);
}
int get_number_of_carriage() const {
return carriage.get_number_of_carriage();
}
void set_type_of_carriage(string type_of_carriage) {
this->carriage.set_type_of_carriage(type_of_carriage);
}
string get_type_of_carriage() const {
return carriage.get_type_of_carriage();
}
void set_sits(string type_of_carriage) {
this->carriage.set_sits(type_of_carriage);
}
int get_sits() const {
return carriage.get_sits();
}
void Get_Carriage(Carriage carriage) {// ?????????????????????????????????????????????
set_number_of_carriage(carriage.get_number_of_carriage());
set_type_of_carriage(carriage.get_type_of_carriage());
}
void Get_Train() {
this->set_number(train.get_number());
this->set_path(train.get_path());
this->set_date(train.get_date());
this->set_time(train.get_time());
this->set_cars(train.get_cars());
}
//для info
void set_fio(string fio) {
data.set_fio(fio);
}
string get_fio() const {
return data.get_fio();
}
void set_sit(int sit) {
data.set_sit(sit);
}
int get_sit() const {
return data.get_sit();
}
void ScanCarriage() {
carriage.ScanСarriage();
}
void ScanInfo() {
data.ScanInfo();
}
};
//поиск при покупке
void buying() {
string pathtoT = "Tickets.txt";
string pathtoBT = "BoughtTickets.txt";
ifstream file;
fstream boughtTickets;
int size = 100000;
Tickets *temp_tickets = new Tickets[size];
string temp_path;
string temp_date;
cout << "\nНаправление движения поезда: ";
cin >> temp_path;
cout << "\nДата отправления поезда: ";
cin >> temp_date;
file.open(pathtoT);
//Tickets tik;
int s = 0;
вот те способы, которыми я пыталась, к слову, с перегрузкой у меня тоже не получилось
if (!file.is_open() && !boughtTickets.is_open()) {
cout << "\nОшибка открытия файла!" << endl;
}
else {
cout << "\nФайл успешно открыт!" << endl;
while (true) {
//file >> temp_tickets[s];
//file.read((char*)&temp_tickets[s], sizeof(temp_tickets[s]));
//temp_tickets[s].read(&file);
temp_tickets[s].Print(temp_tickets[s].get_number());
if (file.eof()) {
break;
}
s++;
}
дальше код не нужен вроде, мне бы с этим разобраться
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хочу запустить метод в отдельном потоке при помощи функции _beginthread(), но получаю ошибку, если не было указано void* в аргументах функции
Есть ли в Qt метод, который ограничивает кол-во вводимых символов в QTextEdit или придется самому его реализоаывать?
Мне нужно реализовать последовательность https://oeisorg/A323119 на С++, но конкретных формул нет
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском