ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    поліморфні Вектора
         

     

    Інформатика, програмування

    поліморфні Вектора

    У вас є інша можливість - визначити ваш векторний та інші вміщають класи через покажчики на об'єкти деякого класу:

    class common (

    //...

    );

    class vector (

    common ** v;

    //...

    public:

    cvector (int);

    common * & elem (int);

    common * & operator [] (int);

    //...

    );

    Зауважте, що оскільки в таких векторах зберігаються покажчики, а не самі об'єкти, об'єкт може бути "в" декількох таких векторах одночасно. Це дуже корисна властивість подібних вміщають класів, таких, як вектора, зв'язані списки, множини і т.д. Крім того, можна привласнювати покажчик на похідний клас вказівником на його базовий клас, тому можна використовувати наведений вище cvector для зберігання покажчиків на об'єкти всіх похідних від common класів.

    Наприклад:

    class apple: public common (/*...*/)

    class orange: public common (/*...*/)

    class apple_vector: public cvector (

    public:

    cvector fruitbowl (100);

    //...

    apple aa;

    orange oo;

    //...

    fruitbowl [0] = &aa;

    fruitbowl [1] = &oo;

    )

    Проте, точний тип об'єкта, який увійшов в такій вміщає клас, більше компілятору не відомий. Наприклад, у попередньому прикладі ви знаєте, що елемент вектора є common, але є він apple або orange? Звичайно точний тип повинен в наслідок бути відновлений, щоб забезпечити правильне використання об'єкта. Для цього потрібно або в якійсь формі зберігати інформацію про тип в самому об'єкті, або забезпечити, щоб під вміщає клас містилися тільки об'єкти даного типу. Остання легко досягається за допомогою похідного класу. Ви можете, наприклад, створити вектор вказівників на apple:

    class apple_vector: public cvector (

    public:

    apple * & elem (int i)

    (return (apple * &) cvector:: elem (i);)

    //...

    );

    використовуючи запис приведення до типу (тип) вираз, щоб перетворити common * & (посилання на покажчик на common), яку повертає cvector:: elem, в apple * &. Таке застосування похідних класів створює альтернативу узагальненим класами. Писати його трохи важче (якщо не використовувати макроси таким чином, щоб похідні класи фактично реалізовували узагальнені класи, але воно має ту перевагу, що всі похідні класи спільно використовують єдину копію функції базового класу. У разі узагальнених класів, таких, як vector (type), для кожного нового використовуваного типу повинна створюватися (за допомогою implement ()) нова копія таких функцій. Інший спосіб, зберігання ідентифікації типу в кожному об'єкті, приводить нас до стилю програмування, який часто називають об'єкти-заснованим або об'єктно-орієнтованим.

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://www.realcoding.net

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status