- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
// File icontact.h
// Describes a contact in the address book
class IContact
{
public:
virtual ~IContact();
virtual void ...
...
void setContact(const QString& contact);
...
private:
QString m_contact;
// ... other fields ...
};
// File icontact.cpp
void IContact::setContact(const QString &contact)
{
m_contact = contact;
}
> QString m_contact;
> void setContact(const QString& contact);
Ох уж эти крестовые интерфейсы с ошмётками реализации…
а что будет m_contact? он вэмбеддица в каждый файл, который его юзает?
А если в классе нет полей, а все методы абстрактные - ну, тогда он и есть интерфейс, чем он ненормален?
Либо ты Pure interface (по сути -- контракт), либо ты закрытый для наследования.
За наследование реализации надо бить ебало и ссать в рот чуть менее, чем всегда.
Не язык плох, а те, кто на нем пишут
Да не нужно это, если это не pure abstract, а тогда он интерфейс (або протокол в терминах ObjC).
Пушо наследование ВСЕГДА нужно заменять делегированием.
Если хочется шаблонного метода -- значит параметризуй объект лямбдой с этой стратегией.
В языке должен быть сахер для делегирования (как в котлине) а не блядское наследование.
Самая педерастия в C# и Java, в том, шо там все открытое (а в жобе еще и виртуальное) по умолчанию.
Долбоёб всегда может наследоваться от твоегоь класса (если ты явно это не запретил) и переопределить конктеный метод
И сломать LSP как имнимум. А тебе потом это поддерживать.
наследование реализации -- зло
С другой стороны, абстрактный класс там можно сделать, и это, в обещм, плохо.
Но вообще это имплементирующий кококласс.
У меня надёжных только 3.
Жухрай сокрушенно качал головой, но, увидя огорчение в глазах Павла, не раздумывая, отстегнул свой маузер: — Вот тебе мой подарок. Павел не сразу поверил, что ему дарят вещь, о которой он так давно мечтал, но Жухрай накинул на его плечо ремень: — Бери, бери! Я же знаю, что у тебя на него давно глаза горят. Только ты осторожней с ним, своих не перестреляй. Вот тебе еще три полные обоймы к нему.
ничего не будет. В том месте где ты создашь его объект -- в том месте этот m и будет.
Это же не код.
Вот если бы ты сделал(а) реализацию (дефикацию) функции в .h файле, то она бы успешно вкопулировалась во всех сегменты кода всех объектных файлов (при условии что это класс, а не шоблоёбло)
А мембер-то за чем?
Жопень в этом говнокоде в том что
* у контакта есть контакт
* у интерфейса (майки с I называюит интефейсы даже в CLR) есть член. Это как если бы у девки был член. Кому-то может и ок, но вообще ничего хорошего.
Наверняка ты стрелец.
Я считаю, что ты один из ушедших в мир иной юзеров, который создал себе волшебное зеркало, чтобы тешить себя независимостью. Но полной обособленности тебе обрести не удалось. Мне жаль тебя.