Читаем Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT полностью

 void PrintDimention(void) {cout << Rectangle PrintDimention << ‘\n’}

};


// Главная функция

void main(void) {

 // Определяем объект порожденного класса

 Rectangle rectObject;


 // Определяем указатель на объект порожденного класса

 // и инициализируем его

 *Rectangle ptrRectObject = &rectObject


 // Определяем указатель на объект базового класса Figure

 // и записываем в него адрес объекта порожденного класса.

 *Figure ptrFigObject = &rectObject


 // Вызываем методы класса Rectangle, используя имя объекта

 rectObject.PrintName;

 rectObject.PrintDimention;

 cout << '\n';


 // Вызываем методы класса базового класса Figure

 rectObject.Figure::PrintName;

 rectObject.Figure::PrintDimention;

 cout << '\n';


 // Вызываем методы класса Rectangle, используя указатель на

 // объекты класса Rectangle

 ptrRectObject->PrintName;

 ptrRectObject->PrintDimention;

 cout << '\n';


 // Вызываем методы класса Rectangle, используя указатель на

 // объекты класса Figure

 ptrFigObject->PrintName;

 ptrFigObject->PrintDimention;

}

Если вы запустите приведенную выше программу, она выведет на экран следующую информацию:

Rectangle PrintName

Rectangle PrintDimention


Figure PrintName

Figure PrintDimention


Rectangle PrintName

Rectangle PrintDimention


Figure PrintName

Figure PrintDimention

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

Виртуальные методы могут быть объявлены как чисто виртуальные. Для этого после описания метода указывается специальный спецификатор (= 0). Он означает, что описанные методы не определены.

Класс в котором определен хотя бы один чисто виртуальный метод называется абстрактным. Нельзя создавать объекты абстрактного класса. Абстрактный класс может использоваться только в качестве базового класса для построения других классов.

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

В качестве примера абстрактного класса мы приведем класс Abstract, в котором описан чисто виртуальный метод PureFunc. Обратите внимание, что этот метод не определен в классе Abstract. Определение метода содержится только в порожденном классе Fact.

// Абстрактный класс Abstract

class Abstract {

public:

 // Чисто виртуальный метод, не имеет определения

 virtual int PureFunc(void) = 0;

 void SetValue(int i) {iValue = i;}

 int iValue;

};


// Класс Fact

class Fact : public Abstract {

 int PureFunc(void) {return iValue * iValue;}

};

Структуры

Понятие структуры в языке Си++ значительно расширено. Структура в Си++ обладает всеми возможностями классов. В структуры Си++ можно включать не только элементы данных, но и методы. Вы можете наследовать от структур новые структуры, точно также как вы наследуете новые классы от базовых классов.

Различие между структурами и обычными классами заключается только в управлении доступом к их элементам. Так, если элементы класса по умолчанию объявлены как private, то все элементы структуры по умолчанию объявлены как public.

Ниже мы привели пример объявления структуры StructData и класса ClassData, которые содержат одинаковые элементы с одинаковыми правами доступа к ним. Фактически, структура StructData и класс ClassData совершенно равнозначны.

//====================================================

// Класс ClassData

class ClassData {

 int iPrivateValue;

public:

 int iPublicValue;

};


//====================================================

// Структура StructData

struct StructData {

 int iPublicValue;

private:

Перейти на страницу:

Все книги серии Библиотека системного программиста

Похожие книги

Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных