Понедельник, Июль 5th, 2010

Шпоры по С++

// объект
bp->virt( ); // Вызов виртуальной функции
bp->nonvirt( ); // Вызов не-виртуальной функции
return 0;
}
Результат
Hello from Derived :: virt
Hello from Base :: nonvirt
Результат выполнения приведенной программы показывает, что при обращении к виртуальной функции вызывается, как должно быть, функция производного класса. Обращение к невиртуальной функции nonvirt, однако, вызывает Base::nonvirt, хотя объект на самом деле принадлежит к производному классу.
Для использования механизма виртуальных функций, необходимо применять указатели или ссылки. Только указатель (или ссылка) на класс может ссылаться на представитель производного класса.
Для виртуальных функций существуют следующие правила:
виртуальную функцию нельзя объявлять как static;
спецификатор virtual необязателен при переопределении функции в производном классе;
виртуальная функция должна быть определена.
Обойти механизм виртуальных функций можно, указав при вызове имя класса с операцией разрешения видимости.
Абстрактным классом называется класс, в котором есть хотя бы одна чистая (пустая) виртуальная функция.
Чистой виртуальной называется компонентная функция, которая имеет определение:
Virtual тип имя_функции(список_формальных_параметров)=0;
Конструкция «=0» называется «чистый спецификатор». Например,
virtual void fpure(void)=0;
Чистая виртуальная функция «ничего не делает» и недоступна для вызовов. Ее назначение – служить основой для подменяющих ее функций в производных классах. Абстрактный класс может использоваться только в качестве базового для производных классов.
Предположим, что имеется абстрактный класс:
class B {protected: virtual void func(char)=0;
void sos(int); };
На основе класса В можно по-разному построить производные классы: class D:public B {…void func(char);};
class E:public B {void sos(int);};

31 Абстрактные классы и их использование
Абстрактным классом называется класс, в котором есть хотя бы одна чистая (пустая) виртуальная функция.
Чистой виртуальной называется компонентная функция, которая имеет определение:
Virtual тип имя_функции(список_формальных_параметров)=0;
Конструкция «=0» называется «чистый спецификатор». Например,
virtual void fpure(void)=0;
Чистая виртуальная функция «ничего не делает» и недоступна для вызовов. Ее назначение – служить основой для подменяющих ее функций в производных классах. Абстрактный класс может использоваться только в качестве базового для производных классов.
Предположим, что имеется абстрактный класс:
class B {protected: virtual void func(char)=0;
void sos(int);
};
На основе класса В можно по-разному построить производные классы: class D:public B {…void func(char);};
class E:public B {void sos(int);};

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Категория: Шпоры