Я не уверен, ПОЧЕМУ вы хотите это сделать, но это возможно.Просто помните, что просто потому, что вы можете что-то сделать, не означает, что вы ДОЛЖНЫ делать это (см. 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;
}