Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Абстрактные классы.




Очень часто виртуальная функция, объявленная в базовом классе, никогда не используется в нём, то есть она представляется в виде пустой функции ( { } ).

Версия виртуальной функции, которая должна быть определена, но никогда не будет использоваться, должна быть объявлена как чисто виртуальная :

Virtual тип имя_функции (список параметров) =0;

При выполнении в программе число виртуальной функции генерируется сообщение об ошибке и программа аварийно завершается (при работе пустой функции этого не происходит).

Класс с одной или большим количеством чисто виртуальных функций называется — абстрактным. Правила языка С++ запрещают использование таких классов, они могут использоваться только как базовые для создания других классов. Это происходит потому, что одна или несколько функций для объектов этого класса не имеют определения. Данная ситуация используется для обнаружения ошибок создания фиктивных объектов при помощи компилятора.

Рекомендации:

§ Используйте абстрактные типы данных для создания для создания общего интерфейса для всех производных классов.

§ Обязательно замещайте в произвольных классах чистые виртуальные функции.

§ Объявляйте все функции, которые требуют замещения в произвольном классе как виртуальные.

§ Не пытайтесь создать объект абстрактного класса.


Лекция № 11.Статические переменные. Шаблоны функций и классов. Связные списки.

Статические переменные-члены и статические функции-члены.

До этого момента предполагалось, что все данные находящиеся в классе должны принадлежать объектам класса, причём какое-либо данное должно было принадлежать конкретному объекту класса. Но иногда возникает необходимость в получении информации о накоплении данных программой. (например о количестве объектов класса). Эту задачу решают статистические переменные-члены. Эти переменные используются всеми объектами класса, то есть можно сказать, что они принадлежат классу, а не объекту класса. Их можно рассматривать как нечто среднее между глобальными переменными и переменными-членами.


#include<iostream.h>

Class Cat

{

public:

Cat(int age):itsAge(age){HayMenyCats++;}

virtual ~Cat(){HayMenyCats--;}

virtual int GetAge() {return itsAge;}

virtual void SetAge(int age){itsAge=age;}

Static int HayMenyCats;

private:

Int itsAge;

};

int Cat::HayMenyCats =0;

Int main(void)

{

const int MaxCat=5;

Int i;

Cat *CatHouse[MaxCat];

for(i=0;i<MaxCat;i++)

CatHouse[i]=new Cat(Maxcat-i);

for(i=0;i<MaxCat;i++)

{

cout<<"сейчас у нас ";

cout<<Cat::HayMenyCats;



cout<<" кота.\n";

cout<<"удалим кота, возраст которого ";

cout<<CatHouse[i]->GetAge()<<" года \n";

delete CatHouse[i];

CatHouse[i]=0;

}


mylektsii.ru - Мои Лекции - 2015-2018 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал