LINUX.ORG.RU

Оператор >>. Как передать напрямую в функцию класса?


0

0

Переопределяю оператора ">>". Но дело в том, что данные из in должны быть помещены в private переменные класса Contact.

Как можно из >> передать напрямую в функцию, которая имеет доступ к private данным?

Или может вообще по другому лучше как-то реализовать? От >> избавиться не имею возможности.



QDataStream &operator>>(QDataStream &in, Contact &contact)
{
	in      >> contact.setContactName()
		>> contact.setContactSurname()
		>> contact.setContactOrganization()
	return in;
}


Сами функции...

void Contact::setContactName(QString name) 
{
	contactName = name;
}

void Contact::setContactSurname(QString surname)
{
	contactSurname = surname;
}
void Contact::setContactOrganization(QString organization)
{
	contactOrganization = organization;
}
anonymous

QDataStream &operator>>(QDataStream &in, Contact &contact)
{
	in      >> contact.setContactName()
		>> contact.setContactSurname()
		>> contact.setContactOrganization()
	return in;
}

принять данные во временные переменные и после вызвать соотв. setxxx() ?

QDataStream &
operator>>(QDataStream &in, Contact &contact)
{
    QString s;
    in >> s;
    contact.setContactName(s);
    ......
    return in;
}

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Спасибо...

Подскажите, пожалуйста..

QDataStream &operator<<(QDataStream &out, Contact &contact)
QDataStream &operator<<(QDataStream &out, const Contact &contact)


Что реально делает const? Понимаю, что запрещает делать какие-либо изменения с contact.

Но почему при вызове метода Contact пишет вот что:

contact.h:67:7: warning: no newline at end of file
contact.cpp: In function `QDataStream& operator<<(QDataStream&, const Contact&)':
contact.cpp:109: error: passing `const Contact' as `this' argument of `QString Contact::getContactName()' discards qualifiers

Метод, который вызываю данные в классе никак не меняет.

anonymous
()
Ответ на: комментарий от anonymous

Мне пришлось убрать const, чтобы функция заработала. Это не опасно?

anonymous
()

void
Contact::init_from_stream(QDataStream &in)
{
    in >> contactName
       >> contactSurname
       >> contactOrganization;
}

QDataStream &
operator>>(QDataStream &in, Contact &contact)
{
    contact.init_from_stream(in);
    return &in;
}

anonymous
()
Ответ на: комментарий от anonymous

>Что реально делает const? Понимаю, что запрещает делать какие-либо изменения с contact.

И еще это аргумент для перегрузки. Часто используется в случаях обращений к контейнерам (по типу a[1] = b;), в результате чего определяется - распределять память под новый элемент или нет.

>Метод, который вызываю данные в классе никак не меняет.

Может стОит сделать сам метод константным.

generatorglukoff ★★
()
Ответ на: комментарий от anonymous

>>contact.cpp:109: error: passing `const Contact' as `this' argument of `QString Contact::getContactName()' discards qualifiers

потому что getContactName() сама объявлена без const.

В классе должно быть

class Contact
{
           ...
           ... getContactName() const;
};

alex_custov ★★★★★
()

class Contact
{
    friend QDataStream& operator>>(QDataStream &in, Contact &contact);
    ...
};

QDataStream &operator>>(QDataStream &in, Contact &contact)
{
	in     >> contact.contactName
	        >> contact.contactSurname
	        >> contact.contactOrganization;

	return in;
}

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.