Единственный оператор-член, которому в явном виде нужен parent, возвращает отношение любых двух экземпляров и в любом случае должен перебрать до ближайшего общего предка ветви, заканчивающиеся обоими операндами. При этом не избежна проверка на то, является ли текущий предок корнем дерева всех экземпляров данного класса. Ни одной функции-члену parent в явном виде не нужен.Romeo писал(а):К тому же в коде ты в любом случае в некоторых местах сейчас вынужден определять был ли вызван метод для экземпляра, либо для эталона, используя конструкцию типа:
Код cpp:
if (m_pParent != NULL)
{
...
}
После разнесения на отдельные классы такие условия пропадут и как раз дадут разницу в коде методов между двумя классами.
Как запретить повторное использование конструктора?
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Сионист писал(а):А Вы разве нет?
Хорошо, похоже придётся объяснить, что именно я не понял. Я тебе скажу, что ты слышал некоторые термины, но используешь их ни к селу, ни к городу, похоже не осознавая до конца, что они обозначают.
Поясню. Синглтон (в русском варианте "одиночка") - это такой класс, который может быть инстанцирован в системе ровно один раз. В языке нет иных способов наложить ограничение на одноразовое инстанцирование, кроме как перенести все конструкторы в закрытую секцию класса и выставить наружу метод, обеспечивающей доступ к единому объекту. Я намеренно выделил слово все. Теперь посмотри, что пишешь ты.
Не может конструктор конструировать синглтон, так как у "обычного" синглтона он закрыт и его прямой вызов из внешенго кода невозможен!Сионист писал(а): А можно сделать, чтоб один конструктор контруировал "обычный" сингилтон...
И вот тут тоже лажа. Если это синглтон, то второй конструктор тоже должен быть спрятан. Иначе его можно будет вызвать сколько угодно раз и это уже будет никакой не синглтон.Сионист писал(а): ...а второй - обычный объект?
Надеюсь, теперь понятно, что именно тут не стыкуется. Сионист, почитай книги об архитектуре, так как, к сожалению, сейчас у тебя арихитектурное мышление находится в зачаточном состоянии.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Мне нужен класс, экземпляры которого вообще не имеют какого либо смысла по одиночке вне парных транзитивных отношений между ними, а любой экземпляр определяется только через парное отношение с его участием. Но так как по синтаксису декларации объекта нельзя декларировать два объекта одновременно, то при создании одного объекта каждой пары задание отношения откладывается до создания второго объекта.Romeo писал(а):Слушай, ты можешь рассказать, чего именно тебе нужно добиться, а не описывать ту архитектуру, которую ты уже успел навернуть?
Надуманы как раз твои "правила" и "вырожденные методы", которым в качественной архитектуре взяться неоткуда и для возможности самого существования которых её необходимо изуродовать так, что не всякий компилятор разберёт, что же в итоге получилось.Romeo писал(а):Мне уже очевидно, что архитектура неоправданно изощрена и ущербна. Расскажи, чего нужно добиться и давай придумаем вместе, как всё должно выглядеть. В правильной архитектуре всех этих надуманных проблем просто не будет. В том числе статических методов, знающих о всех объектах.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Если это так, то вся эта логика по работе со связанными объектами должна быть вынесена в отдельный класс-менеджер. Он же будет ответственен и за правильное создание объектов и их отношений. Это решит проблему однократного вызова конструктора, так как менеджер будет знать, когда вызывать один конструктор, а когда другой, и сам не будет делать повторный вызов первого конструктора.Сионист писал(а):Единственный оператор-член, которому в явном виде нужен parent, возвращает отношение любых двух экземпляров и в любом случае должен перебрать до ближайшего общего предка ветви, заканчивающиеся обоими операндами. При этом не избежна проверка на то, является ли текущий предок корнем дерева всех экземпляров данного класса. Ни одной функции-члену parent в явном виде не нужен.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Вот как раз ты путаешь сущность с реализацией. Сингилтон есть класс, который гарантированно имеет ровно один экземпляр. Всё. А защищённые конструкторы - это уже особенности реализации. Как этот единственный объект инстанцировать то, если все конструкторы закрыты?Romeo писал(а):Хорошо, похоже придётся объяснить, что именно я не понял. Я тебе скажу, что ты слышал некоторые термины, но используешь их ни к силе, ни к городу, похоже не осознавая до конца, что они обозначают.
Поясню. Синглтон (в русском варианте "одиночка") - это такой класс, который может быть инстанцирован в системе ровно один раз. В языке нет иных способов наложить ограничение на одноразовое инстанцирование, кроме как перенести все конструкторы в закрытую секцию класса и выставить наружу метод, обеспечивающей доступ к единому объекту. Я намеренно выделил слово все. Теперь посмотри, что пишешь ты.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Вообще-то я говорил о необходимости устранения вырожденных методов. Ты в очередной раз доказываешь, что не умеешь читать.Сионист писал(а):Надуманы как раз твои "правила" и "вырожденные методы", которым в качественной архитектуре взяться неоткуда и для возможности самого существования которых её необходимо изуродовать так, что не всякий компилятор разберёт, что же в итоге получилось.
Про то, что компилятор не разберёт - ты наивен, как младенец и по всей видимости не видел никогда в глаза хоть сколько-нибудь сложных проектов.
То, что я предлагаю, называется не уродованием, а построением архитектуры, которая сейчас у тебя не просто "не качественная", а отсутствует напрочь. Ещё раз призываю тебя почитать книги. Например ГОФа. На данный момент ты просто профан в вопросах архитектуры.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Не распарсил.Romeo писал(а):Если это так, то вся эта логика по работе со связанными объектами должна быть вынесена в отдельный класс-менеджер. Он же будет ответственен и за правильное создание объектов и их отношений. Это решит проблему однократного вызова конструктора, так как менеджер будет знать, когда вызывать один конструктор, а когда другой, и сам не будет делать повторный вызов первого конструктора.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ога. Вот только я своими глазами видел шесть классов, каждый из которых использовал функции-члены, операторы-члены и закрытые поля пяти других. И всё там было хорошо ровно до первой компиляции, а потом оказалось, что компилятор это "проглотить" не способен, мессагу о чём я тоже видел своими глазами. А вот ты подобных извращений походу не встречал.Romeo писал(а):Про то, что компилятор не разберёт - ты наивен, как младенец
Как же я их писал то?Romeo писал(а): и по всей видимости не видел никогда в глаза хоть сколько-нибудь сложных проектов.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Зачем устранять то, чего нет?Romeo писал(а):Вообще-то я говорил о необходимости устранения вырожденных методов.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Уууу, вот тут мне уже нечего добавить. Ну-ка покажи мне, как по-твоему должен выглядеть настоящий синглтон в твоём понимании. Говоришь особенности реализации? Покажи мне свою реализацию.Сионист писал(а):Вот как раз ты путаешь сущность с реализацией. Сингилтон есть класс, который гарантированно имеет ровно один экземпляр. Всё. А защищённые конструкторы - это уже особенности реализации. Как этот единственный объект инстанцировать то, если все конструкторы закрыты?
Сионист, ты просто неуч, который пытается казаться важным и умным, но у тебя ничего не получается, к сожалению.
Синглтон без скрытых конструкторов в студию! Я жду!
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.