класс — Перегрузка входного оператора C ++

Я пытаюсь перегрузить оператор ввода в классе UserLogin, который я создал. Ошибки времени компиляции не выдаются, однако значения также не устанавливаются.

Все работает, но остается содержимое ul:
Идентификатор строки Sally
Время входа в систему 00:00
Время выхода из системы — 00:00

Точка входа

#include <iostream>
#include "UserLogin.h"
using namespace std;

int main() {
UserLogin ul;

cout << ul << endl; // xxx 00:00 00:00
cin >> ul; // sally 23:56 00:02
cout << ul << endl; // Should show sally 23:56 00:02
// Instead, it shows xxx 00:00 00:00 again

cout << endl;
system("PAUSE");
}

UserLogin.h

#include <iostream>
#include <string>
#include "Time.h"
using namespace std;

class UserLogin
{
// Operator Overloaders
friend ostream &operator <<(ostream &output, const UserLogin user);
friend istream &operator >>(istream &input, const UserLogin &user);

private:
// Private Data Members
Time login, logout;
string id;

public:
// Public Method Prototypes
UserLogin() : id("xxx") {};
UserLogin( string id, Time login, Time logout ) : id(id), login(login), logout(logout) {};
};

UserLogin.cpp

#include "UserLogin.h"
ostream &operator <<( ostream &output, const UserLogin user )
{
output << setfill(' ');
output << setw(15) << left << user.id << user.login << " " << user.logout;

return output;
}

istream &operator >>( istream &input, const UserLogin &user )
{
input >> ( string ) user.id;
input >> ( Time ) user.login;
input >> ( Time ) user.logout;

return input;
}

3

Решение

Ваше определение operator>> неправильно. Вам нужно пройти user аргумент по неконстантной ссылке и избавиться от приведений:

istream &operator >>( istream &input, UserLogin &user )
{
input >> user.id;
input >> user.login;
input >> user.logout;

return input;
}

Приведения приводят к тому, что вы читаете во временное состояние, которое затем немедленно отбрасывается.

9

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

input >> (type) var;

неправильно, не делай этого. Сделать простой

input >> var;
0

#ifndef STRING_H
#define STRING_H

#include <iostream>
using namespace std;

class String{
friend ostream &operator<<(ostream&,const String & );friend istream &operator>>(istream&,String & );

public:
String(const char[] = "0");
void set(const char[]);
const char * get() const;
int length();

/*void bubbleSort(char,int);
int binSearch(char,char,int);

bool operator==(const String&);
const String &operator=(const String &);
int &operator+(String );*/

private:
const char *myPtr;
int length1;

};
#endif
-2
По вопросам рекламы [email protected]