На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 211 212 [213] 214 215 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата Romkin @
    Цитата Flex Ferrum @
    this указывает на конструируемый в данный момент объект.

    Ну вот я и говорил, что в С++ объекты - сборка из предков, которая делает вид что она единое целое :tong:

    Не суди объекты по использованию их в их конструкторах.

    Цитата
    А потом уже есть метаклассы, с помощью которых и создаются экземпляры объектов.

    Странно. Метаклассы отвечают за порождения классов, а не объектов(за которое отвечают классы).

    Цитата
    Цитата D_KEY @
    А вообще дискуссия на тему конструкторов уже осточертела

    Угу. Я уже выяснил все что нужно, и объяснил все что можно...

    Осталось всем заинтересованным сделать соответствующие выводы :)
      Цитата D_KEY @
      Осталось всем заинтересованным сделать соответствующие выводы

      Хм. Вот есть у тебя класс, у которого пяток конструкторов, причем он достаточно абстрактный, и в потомках конструкторы будут перекрываться, для инициализации.
      В Delphi как пример - TComObject, у которого три конструктора, с разными параметрами.
      И есть procedure Initialize; virtual;, про которую сказано: чтобы не перекрывать все конструкторы для инициализации, для инициализации полей потомка перекрывайте ее, она вызывается из всех конструкторов.
      А в С++ что, перекрываются все имеющиеся конструкторы?

      Добавлено
      Цитата D_KEY @
      Странно. Метаклассы отвечают за порождения классов, а не объектов(за которое отвечают классы).

      От порождения классов слышу! Где ты таких терминов-то набрался? :)
        Цитата Romkin @
        Хм. Вот есть у тебя класс, у которого пяток конструкторов, причем он достаточно абстрактный, и в потомках конструкторы будут перекрываться, для инициализации.

        А зачем достаточно абстрактному классу, нужны 5 конструкторов? :huh:

        Добавлено
        Зачем ему вообще конструкторы?

        Добавлено
        Romkin, понимаешь фишку, если у меня есть иерархия классов, и я через указатель на интерфейс базового класса, буду создавать производный, ну допустим выбрав один из пяти конструкторов, то по умолчанию, если в этом конструкторе я явно не вызываю какой либо конструтор базового класса, у меня будет вызваны конструкторы по умолчанию, те что без параметров...
          Цитата Romkin @
          Цитата D_KEY @
          Осталось всем заинтересованным сделать соответствующие выводы

          Хм. Вот есть у тебя класс, у которого пяток конструкторов, причем он достаточно абстрактный

          Если он абстрактный, то о каких 5 конструкторах идет речь, ведь абстрактные классы нельзя создавать. Ну да ладно...

          Цитата
          и в потомках конструкторы будут перекрываться, для инициализации.

          Конструкторы не перекрываются :)
          Ибо не могут быть методами объекта ;)

          Цитата
          А в С++ что, перекрываются все имеющиеся конструкторы?

          Да, поэтому лучше подумать о конструировании и фабриках. Вообще не люблю, когда код работает с объектами конкретных классов в случае ОО-декомпозиции.

          Цитата
          Цитата D_KEY @
          Странно. Метаклассы отвечают за порождения классов, а не объектов(за которое отвечают классы).

          От порождения классов слышу! Где ты таких терминов-то набрался? :)
          Из всяких умных книжек и статей. Метакласс - это класс класса, т.е. его экземпляром является класс.
          Сообщение отредактировано: D_KEY -
            Ну вот как показательный пример с конструкторами:
            ExpandedWrap disabled
              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;
              }

            Вывод будет таким:
            ExpandedWrap disabled
              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-й случай...
              Цитата D_KEY @
              Конструкторы не перекрываются :)
              Ибо не могут быть методами объекта ;)

              они перекрываются как методы метаобъекта.
                Цитата korvin @
                Цитата D_KEY @
                Конструкторы не перекрываются :)
                Ибо не могут быть методами объекта ;)

                они перекрываются как методы метаобъекта.

                В Delphi, как я понял, они являются методом объекта.
                  Цитата D_KEY @
                  Из всяких умных книжек и статей. Метакласс - это класс класса, т.е. его экземпляром является класс.

                  но он при этом не порождает классы, он их описывает, объекты порождает конструктор. =)
                    Цитата korvin @
                    объекты порождает конструктор. =)

                    В делфи - он занимаеца их инициализацией! А пораждает их метакласс...
                      Цитата D_KEY @
                      В Delphi, как я понял, они являются методом объекта.

                      нет, методом объекта там является инициализатор, а конструктор -- методом класса:
                      ExpandedWrap disabled
                        object : TObject = TObject.Create; // <- вызов конструктора как метода класса


                      Добавлено
                      Цитата KILLER @
                      В делфи - он занимаеца их инициализацией! А пораждает их метакласс...

                      нет, классы (любого уровня "метавости") ничего не порождают, они описывают. порождают конструкторы, не важно как реализованные
                        Цитата D_KEY @
                        Если он абстрактный, то о каких 5 конструкторах идет речь, ведь абстрактные классы нельзя создавать. Ну да ладно...

                        Шаблоны. Вообще у TComObject есть конструкторы Create, CreateFromFactory и CreateAggregated. Для разных случаев поюзывания.
                        Цитата D_KEY @
                        Из всяких умных книжек и статей. Метакласс - это класс класса, т.е. его экземпляром является класс.

                        В Delphi, чтобы не путаться, метакласс - это тип, иногда его просто классом называют, потому что его методы называют методами класса. А экземпляр класса - это объект. Есть еще переменная класса...
                          Цитата korvin @
                          нет, классы (любого уровня "метавости") ничего не порождают, они описывают. порождают конструкторы, не важно как реализованные

                          Ну значит кто то из нас троих неправ...
                          Цитата Romkin @
                          Собственно конструирование - метод метакласса. Инициализация - метод собственно объекта.
                            Цитата KILLER @
                            Цитата korvin @
                            нет, классы (любого уровня "метавости") ничего не порождают, они описывают. порождают конструкторы, не важно как реализованные

                            Ну значит кто то из нас троих неправ...
                            Цитата Romkin @
                            Собственно конструирование - метод метакласса. Инициализация - метод собственно объекта.

                            почему же? конструирует метод метакласса, но не сам же метакласс =)
                              Цитата korvin @
                              почему же? конструирует метод метакласса, но не сам же метакласс =)

                              Ааа... Ну спасибо кэп, вон чо имелось ввиду, а я то думал... :D
                                Цитата korvin @
                                Цитата KILLER @
                                Цитата korvin @
                                нет, классы (любого уровня "метавости") ничего не порождают, они описывают. порождают конструкторы, не важно как реализованные

                                Ну значит кто то из нас троих неправ...
                                Цитата Romkin @
                                Собственно конструирование - метод метакласса. Инициализация - метод собственно объекта.

                                почему же? конструирует метод метакласса, но не сам же метакласс =)

                                почему же? конструирует код метода метакласса, но не сам же метод метакласса =)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 211 212 [213] 214 215 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.3304 ]   [ 15 queries used ]   [ Generated: 1.08.26, 12:40 GMT ]