int main()
{
HandPhone A,B;
A>>B;//overloading operator>> to simulate sending sms to another handphone(object)
return 0;
}
Как мне объявить оператор istream для имитации отправки sms на другой мобильный телефон (объект)?
@ ukhti - Вы тоже задаете очень широкий вопрос. Пожалуйста, прочтите FAQ и попытайтесь немного сузить фокус вашего вопроса.
Разве синтаксис типа: B << "Message" << A не был бы более читабельным? В предложенном вами синтаксисе у вас нет понятия сообщения. Хотя я должен сказать, что вместо того, чтобы сразу перегружать оператор, вам следует реализовать общедоступную функцию, например: message (char * message, const HandPhone & from);





std :: istream - это класс, а не оператор. Операторы << и >> могут быть определены для любых двух типов:
class A;
class B;
A operator << (A& a, const B& b) // a << b; sends b to a.
{
a.sendMessage(b);
return a;
}
Вот как определить оператор >>:
void operator >> (HandPhone& a, HandPhone& b)
{
// Add code here.
}
Я установил возвращаемый тип как void, так как не уверен, что цепочка имеет смысл.
Но считается плохим дизайном (в мире C++) перегрузка операторов для выполнения случайных задач, поскольку это затрудняет чтение кода. Операторы потоковой передачи >> и << имеют очень четко определенное значение, но отправка сообщения не так похожа на потоковую передачу, которую я бы хотел использовать таким образом. Я ожидал, что демаршалинг объекта на конечном конце потока приведет к созданию объекта, очень похожего на то, что было помещено на исходном конце.
Сделать что-то подобное намного проще.
B.sendMessageTo(A,Message("PLOP"));
@ ukhti - форматирование сделает этот вопрос немного легче для чтения и, возможно, ответа. :-)