14 private:
15 double myRadius;
16 };
17 #endif
Класс
Конструктор принимает два параметра. Второй параметр необязателен, по умолчанию он принимает значение 0.5. Конструктор передает параметр
Circle(Point2D center, double radius = 0.5)
: Shape(center), myRadius(radius) { }
С другой стороны, С++ не позволяет инициализировать переменную—член в определении класса, поэтому следующий программный код неверен:
// НЕ БУДЕТ КОМПИЛИРОВАТЬСЯ
private:
double myRadius = 0.5;
};
Сигнатура функции
01 class LabeledCircle : public Circle
02 {
03 public:
04 void draw {
05 Circle::draw;
06 drawLabel;
07 }
08 };
С++ поддерживает множественное наследование, т.е. возможность создавать класс, производный сразу от нескольких других классов. При этом используется следующий синтаксис:
class DerivedClass : public BaseClass1, public BaseClass2, …,
public BaseClassN
{
…
};
По умолчанию функции и переменные, объявленные в классе, связываются с экземплярами этого класса. Мы можем объявлять статические функции—члены и статические переменные—члены, которые могут использоваться без экземпляра. Например:
01 #ifndef TRUCK_H
02 #define TRUCK_H
03 class Truck
04 {
05 public:
06 Truck { ++counter; }
07 ~Truck { --counter; }
08 static int instanceCount { return counter; }
09 private:
10 static int counter;
11 };
12 #endif
Статическая переменная—член счетчика
Статическая переменная—член существует в единственном экземпляре для класса — такие переменные являются «переменными класса», а не «переменными экземпляра». Каждая статическая переменная—член должна определяться в файле
#include "truck.h"
int Truck::counter = 0;
Если этого не сделать, компоновщик выдаст сообщение об ошибке из-за наличия «неразрешенного символа». Обращаться к статической функции
01 #include
02 #include "truck.h"
03 using namespace std;
04 int main
05 {
06 Truck truck1;
07 Truck truck2;
08 cout << Truck::instanceCount << " equals 2" << endl;
09 return 0;
10 }
Указатели
Указатель в С++ — это переменная, содержащая не сам объект, а адрес памяти, где располагается объект. Java и C# имеют аналогичную концепцию «ссылки» при другом синтаксисе. Мы начнем с рассмотрения придуманного нами примера, иллюстрирующего применение указателей:
01 #include "point2d.h"
02 int main
03 {