Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 211 212 [213] 214 215 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#3181
,
|
|
|
|
Цитата Romkin @ Ну вот я и говорил, что в С++ объекты - сборка из предков, которая делает вид что она единое целое ![]() Не суди объекты по использованию их в их конструкторах. Цитата А потом уже есть метаклассы, с помощью которых и создаются экземпляры объектов. Странно. Метаклассы отвечают за порождения классов, а не объектов(за которое отвечают классы). Цитата Угу. Я уже выяснил все что нужно, и объяснил все что можно... Осталось всем заинтересованным сделать соответствующие выводы |
|
Сообщ.
#3182
,
|
|
|
|
Цитата D_KEY @ Осталось всем заинтересованным сделать соответствующие выводы Хм. Вот есть у тебя класс, у которого пяток конструкторов, причем он достаточно абстрактный, и в потомках конструкторы будут перекрываться, для инициализации. В Delphi как пример - TComObject, у которого три конструктора, с разными параметрами. И есть procedure Initialize; virtual;, про которую сказано: чтобы не перекрывать все конструкторы для инициализации, для инициализации полей потомка перекрывайте ее, она вызывается из всех конструкторов. А в С++ что, перекрываются все имеющиеся конструкторы? Добавлено Цитата D_KEY @ Странно. Метаклассы отвечают за порождения классов, а не объектов(за которое отвечают классы). От порождения классов слышу! Где ты таких терминов-то набрался? |
|
Сообщ.
#3183
,
|
|
|
|
Цитата Romkin @ Хм. Вот есть у тебя класс, у которого пяток конструкторов, причем он достаточно абстрактный, и в потомках конструкторы будут перекрываться, для инициализации. А зачем достаточно абстрактному классу, нужны 5 конструкторов? Добавлено Зачем ему вообще конструкторы? Добавлено Romkin, понимаешь фишку, если у меня есть иерархия классов, и я через указатель на интерфейс базового класса, буду создавать производный, ну допустим выбрав один из пяти конструкторов, то по умолчанию, если в этом конструкторе я явно не вызываю какой либо конструтор базового класса, у меня будет вызваны конструкторы по умолчанию, те что без параметров... |
|
Сообщ.
#3184
,
|
|
|
|
Цитата Romkin @ Цитата D_KEY @ Осталось всем заинтересованным сделать соответствующие выводы Хм. Вот есть у тебя класс, у которого пяток конструкторов, причем он достаточно абстрактный Если он абстрактный, то о каких 5 конструкторах идет речь, ведь абстрактные классы нельзя создавать. Ну да ладно... Цитата и в потомках конструкторы будут перекрываться, для инициализации. Конструкторы не перекрываются Ибо не могут быть методами объекта Цитата А в С++ что, перекрываются все имеющиеся конструкторы? Да, поэтому лучше подумать о конструировании и фабриках. Вообще не люблю, когда код работает с объектами конкретных классов в случае ОО-декомпозиции. Цитата Из всяких умных книжек и статей. Метакласс - это класс класса, т.е. его экземпляром является класс. Цитата D_KEY @ Странно. Метаклассы отвечают за порождения классов, а не объектов(за которое отвечают классы). От порождения классов слышу! Где ты таких терминов-то набрался? ![]() |
|
Сообщ.
#3185
,
|
|
|
|
Ну вот как показательный пример с конструкторами:
![]() ![]() class Base { public: Base()//! конструктор по умолчанию : m_a(0), m_b(0), m_c(0) { std::cout << "Base::Base(void)" << std::endl; } Base(int a, int b, int c)//! конструктор с параметрами : m_a(a), m_b(b), m_c(c) { std::cout << "Base::Base(int a, int b, int c)" << std::endl; } private: int m_a; int m_b; int m_c; }; class Derived1 : public Base { public: Derived1()//! конструктор по умолчанию { std::cout << "Derived1::Derived1(void)" << std::endl; } Derived1(int a, int b, int c)//! конструктор с параметрами : Base(a, b, c) { std::cout << "Derived1::Derived1(int a, int b, int c)" << std::endl; } Derived1(const std::string& str)//! конструктор с параметрами : m_szString(str) { std::cout << "Derived1::Derived1(const std::string& str)" << std::endl; } private: std::string m_szString; }; int main(int argc, _TCHAR* argv[]) { { Base* pBase = new Derived1; delete pBase; } { Base* pBase = new Derived1(1, 2, 3); delete pBase; } { Base* pBase = new Derived1("killer"); delete pBase; } return 0; } Вывод будет таким: ![]() ![]() Base::Base(void) Derived1::Derived1(void) Base::Base(int a, int b, int c) Derived1::Derived1(int a, int b, int c) Base::Base(void) Derived1::Derived1(const std::string& str) Обрати внимание на 3-й случай... |
|
Сообщ.
#3186
,
|
|
|
|
Цитата D_KEY @ Конструкторы не перекрываются Ибо не могут быть методами объекта ![]() они перекрываются как методы метаобъекта. |
|
Сообщ.
#3187
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ Конструкторы не перекрываются Ибо не могут быть методами объекта ![]() они перекрываются как методы метаобъекта. В Delphi, как я понял, они являются методом объекта. |
|
Сообщ.
#3188
,
|
|
|
|
Цитата D_KEY @ Из всяких умных книжек и статей. Метакласс - это класс класса, т.е. его экземпляром является класс. но он при этом не порождает классы, он их описывает, объекты порождает конструктор. =) |
|
Сообщ.
#3189
,
|
|
|
|
Цитата korvin @ объекты порождает конструктор. =) В делфи - он занимаеца их инициализацией! А пораждает их метакласс... |
|
Сообщ.
#3190
,
|
|
|
|
Цитата D_KEY @ В Delphi, как я понял, они являются методом объекта. нет, методом объекта там является инициализатор, а конструктор -- методом класса: ![]() ![]() object : TObject = TObject.Create; // <- вызов конструктора как метода класса Добавлено Цитата KILLER @ В делфи - он занимаеца их инициализацией! А пораждает их метакласс... нет, классы (любого уровня "метавости") ничего не порождают, они описывают. порождают конструкторы, не важно как реализованные |
|
Сообщ.
#3191
,
|
|
|
|
Цитата D_KEY @ Если он абстрактный, то о каких 5 конструкторах идет речь, ведь абстрактные классы нельзя создавать. Ну да ладно... Шаблоны. Вообще у TComObject есть конструкторы Create, CreateFromFactory и CreateAggregated. Для разных случаев поюзывания. Цитата D_KEY @ Из всяких умных книжек и статей. Метакласс - это класс класса, т.е. его экземпляром является класс. В Delphi, чтобы не путаться, метакласс - это тип, иногда его просто классом называют, потому что его методы называют методами класса. А экземпляр класса - это объект. Есть еще переменная класса... |
|
Сообщ.
#3192
,
|
|
|
|
Цитата korvin @ нет, классы (любого уровня "метавости") ничего не порождают, они описывают. порождают конструкторы, не важно как реализованные Ну значит кто то из нас троих неправ... Цитата Romkin @ Собственно конструирование - метод метакласса. Инициализация - метод собственно объекта. |
|
Сообщ.
#3193
,
|
|
|
|
Цитата KILLER @ Цитата korvin @ нет, классы (любого уровня "метавости") ничего не порождают, они описывают. порождают конструкторы, не важно как реализованные Ну значит кто то из нас троих неправ... Цитата Romkin @ Собственно конструирование - метод метакласса. Инициализация - метод собственно объекта. почему же? конструирует метод метакласса, но не сам же метакласс =) |
|
Сообщ.
#3194
,
|
|
|
|
Цитата korvin @ почему же? конструирует метод метакласса, но не сам же метакласс =) Ааа... Ну спасибо кэп, вон чо имелось ввиду, а я то думал... |
|
Сообщ.
#3195
,
|
|
|
|
Цитата korvin @ Цитата KILLER @ Цитата korvin @ нет, классы (любого уровня "метавости") ничего не порождают, они описывают. порождают конструкторы, не важно как реализованные Ну значит кто то из нас троих неправ... Цитата Romkin @ Собственно конструирование - метод метакласса. Инициализация - метод собственно объекта. почему же? конструирует метод метакласса, но не сам же метакласс =) почему же? конструирует код метода метакласса, но не сам же метод метакласса =) |