tfinclude "point2d.h"

int main() {

Point2D alpha;

Point2D beta(0.666, 0.875);

alpha. setX(beta.yO); beta.setY(alpha.x());

return 0;

}

В С++ переменные любого типа можно объявлять без непосредственного ис­пользования оператора new. Первая переменная инициализируется с помощью стан­дартного конструктора Point2D (т. е. конструктора без параметров). Вторая перемен­ная инициализируется с использованием второго конструктора. Обращение к члену объекта осуществляется с использованием оператора . (точка).

Объявленные таким образом переменные ведут себя как элементарные типы Ja­va и С# (такие, как int и double). Например, при использовании оператора присва­ивания копируется содержимое переменной, а не ссылка на объект. И если позже пе­ременная будет модифицирована, значение всех других переменных, к которым при­сваивалась первая переменная, не изменится.

С++, как объектно-ориентированный язык, поддерживает наследование и поли­морфизм. Для иллюстрации этих свойств мы рассмотрим пример абстрактного клас­са Shape (фигура) и подкласса Circle (окружность). Начнем с базового класса:

#ifndef SHAPE_H #define SHAPE_H

#include "point2d.h"

class Shape {

public:

Shape(Point2D center) .{ myCenter = center; } virtual void draw() = 0;

protected:

Point2D myCenter;

};

#endif

Определение класса создается в заголовочном файле с именем shape, h. Посколь­ку в этом определении делается ссылка на класс Point2D, мы включаем заголовочный файл point2d.h.

Класс Shape не имеет базового класса. В отличие от Java и С#, в С++ не преду­смотрен обобщенный класс Object, который наследуется всеми другими классами. Qt предоставляет QObject в качестве естественного базового класса для объектов всех типов.

Объявление функции draw() имеет две интересные особенности. Она содержит ключевое слово virtual и завершается равенством = 0. Ключевое слово virtual озна­чает, что данная функция может быть переопределена в подклассах. Подобно С# функции-члены в С++ по умолчанию не могут переопределяться. Странное прирав­нивание = 0 указывает на то, что данная функция - чисто виртуальная функция, которая не имеет реализации по умолчанию, и она должна быть реализована в под­классах. Концепция «интерфейса» в Java и С# соответствует в С++ классу, содержа­щему только чисто виртуальные функции.


<< назад вперед >>