Вставка перегрузки оператора

В чем проблема здесь. Это не работает, как ожидалось.

Я хочу чтобы << (вставка) Работа для cout и cin.

#include<iostream>

using namespace std;

class a
{
private:
string name;
int age;
unsigned long int salary;
public:
friend ostream& operator << (ostream& ,a );
friend istream& operator << (istream& ,a );
};

ostream& operator << (ostream& dout,a a1){
cout<<"Name = "<< a1.name<<"Age = "<<a1.age<<"Salary = "<<a1.salary<<end;
return dout;
}
istream& operator << (istream& din,a& a1){
cout<<"Enter Your Name , Age  , Salary .....Press Enter To Seperate New Value"<<end;
cin>>a1.name>>a1.age>>a1.salary;
}
main(int argc, char const *argv[])
{
a a1;

cin<<a1;
cout<<a1;
return 0;
}

Ошибка слишком длинная.
->Ошибка ScreenShot

1

Решение

Я не уверен, ПОЧЕМУ вы хотите это сделать, но это возможно. Просто помните, что просто потому, что вы можете что-то сделать, не означает, что вы ДОЛЖНЫ делать это (см. C ++ Faq Закон наименьшего сюрприза.
Помимо нарушения закона наименьшего удивления, вы можете делать то, что пытаетесь сделать, в вашем коде просто есть несколько простых ошибок компиляции, которые после исправления будут работать нормально (см. Вот для рабочего примера).

Вот изменения, чтобы сделать его компиляцией:

friend istream& operator << (istream& ,a& ); // Note the addition of the &

// Here the variabe is dout, so change to dout. I also added some spacing
ostream& operator << (ostream& dout,a a1){
dout<<"Name = "<< a1.name<<" Age = "<<a1.age<<" Salary = "<<a1.salary<<endl;
return dout;
}

// Here you are using din, so you need to change to din, also you had end instead of endl
istream& operator << (istream& din,a& a1){
cout<<"Enter Your Name , Age  , Salary .....Press Enter To Seperate New Value"<<endl;
din>>a1.name>>a1.age>>a1.salary;
return din;
}

Точно так же полный код также в одном легком месте для вас. Вот вся ваша программа с изменениями для ее компиляции.

#include<iostream>

using namespace std;

class a
{
private:
string name;
int age;
unsigned long int salary;
public:
friend ostream& operator << (ostream& ,a );
friend istream& operator << (istream& ,a& );
};

ostream& operator << (ostream& dout,a a1){
dout << "Name = "<< a1.name <<" Age = "<< a1.age <<" Salary = "<< a1.salary << endl;
return dout;
}
istream& operator << (istream& din,a& a1){
cout <<"Enter Your Name , Age  , Salary .....Press Enter To Seperate New Value" << endl;
din >> a1.name >> a1.age >> a1.salary;
return din;
}
main(int argc, char const *argv[])
{
a a1;

cin<<a1;
cout<<a1;
return 0;
}

Теперь, если мы хотим следовать Закону Наименьшего удивления, то мы бы изменили istream перегрузка оператора для использования >> вместо << и переместите консольный текст из >> перегрузить оператор и просто представить его пользователю перед чтением значений.

#include<iostream>

using namespace std;

class a
{
private:
string name;
int age;
unsigned long int salary;
public:
friend ostream& operator << (ostream& ,a );
friend istream& operator >> (istream& ,a& );
};

// Note - Changed variable 'dout' to 'os' for clarity
ostream& operator << (ostream& os, a a1){
os << "Name = " << a1.name << " Age = " << a1.age << " Salary = "<< a1.salary << endl;
return os;
}

// Changed variable from 'din' to 'is' for clarity
istream& operator >> (istream& is,a& a1){
is >> a1.name >> a1.age >> a1.salary;
return is;
}

main(int argc, char const *argv[])
{
a a1;

cout << "Enter Your Name , Age  , Salary .....Press Enter To Seperate New Value" << endl;
cin >> a1;
cout << a1;
return 0;
}
1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru