Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, Аноним, Вы писали:
А>>>Как наиболее правильно реализовать на C++?
J>>Тут тебе помогут мультиметоды.
J>>Например, в виде двойной диспетчеризации.
J>>Дальше — поиск в руки
А>мультиметоды я нашел:
А>http://www.rsdn.ru/Forum/Message.aspx?mid=51828#51828Автор: Павел Кузнецов
Дата: 06.05.02
А>спасибо.
А>а как насчет operator= стоит ли его делать виртуальным,
А>или лучше не заниматься переопределением операций,
А>а написать метод с имененм?
Можно и то, и другое.
Например, предоставить перегруженную виртуальную функцию типа copy_to с разными аргументами, и звать ее из operator=
типа такого:
class MemSource : public BaseSource {
MemSource & operator=(const BaseSource& rhs) { rhs.copy_to(*this); return *this; }
void copy_to(MemSource& m) {.....}
void copy_to(FileSource & f) {.....}
};
class FileSource : public BaseSource {
FileSource & operator=(const BaseSource& rhs) { rhs.copy_to(*this); return *this; }
void copy_to(MemSource& m) {.....}
void copy_to(FileSource & f) {.....}
};
все виртуальное, естественно