Московский государственный университет имени М.В.Ломоносова
Опубликован: 03.10.2006 | Доступ: свободный | Студентов: 1224 / 79 | Длительность: 09:08:00
Специальности: Программист
Лекция 10:

С++. Классы. Механизмы наследования. Объектные типы

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

Объявление и реализация класса в языке С++

Создаваемый класс должен быть объявлен и реализован.

Объявление класса в языке С++ может иметь следующее формальное описание:

class имя_класса : список_базовых_классов {
public:    // Модификатор доступа относится
           // ко всем перечисленным после 
           // него членам до следующего 
           // модификатора доступа
    // Объявление общедоступных членов класса

protected:
    // Объявление членов класса, доступных 
    // только для производных классов

private:
    // Объявление защищенных членов класса
};

Список базовых классов указывается после имени класса через символ двоеточия ( :), разделяется запятыми и может иметь модификаторы доступа.

Например:

class MyClass :  public ClassA, 
    public ClassB, private ClassC {};

В языке С++ считается, что если модификатор доступа для класса или члена класса не указан, то по умолчанию предполагается модификатор доступа private (защищенный доступ). Для членов структур, объявляемых ключевым словом struct, по умолчанию модификатор доступа предполагается равным public.

Модификатор доступа базового класса позволяет определить, какие переменные и методы базового класса будут доступны из производного класса. Модификатор доступа, указываемый перед именем базового класса, определяет следующие правила доступа к переменным и методам базового класса из производного класса:

  • public - в производном классе доступны все переменные и методы базового класса с модификаторами доступа public и protected, и эти члены класса имеют те же права доступа;
  • protected - члены базового класса с модификаторами доступа public и protected доступны как protected, а с модификатором доступа private - недоступны.
  • private - члены базового класса с модификаторами доступа public и protected доступны как private, а с модификатором доступа private - недоступны.

Например:

class BaseClass
{ public:
    int PublicFunc();    
 protected:
    int ProtectedFunc();
 private:
    int PrivateFunc();   
};
class DerivedClass1 : public BaseClass {
// Наследуемая функция PublicFunc доступна
// как public
// Наследуемая функция ProtectedFunc 
// доступна как protected 
};
class DerivedClass2 : private BaseClass {
// Наследуемая функция PublicFunc доступна 
// как private
// Наследуемая функция ProtectedFunc 
// доступна как private
 };
int main() { }

В теле объявления класса указываются модификаторы доступа, описывающие права доступа для переменных и методов класса:

  • модификатор доступа относится ко всем перечисленным после него членам до следующего модификатора доступа;
  • один и тот же модификатор доступа может указываться несколько раз;
  • после модификатора доступа ставится символ двоеточие;
  • если модификатор доступа не указан, то по умолчанию предполагается private.

Для доступа к членам класса используется операция принадлежности ::, указываемая после идентификатора класса. Для доступа к членам экземпляра класса используются операции . и ->.

Для доступа к объекту самого класса внутри метода члена класса используется ключевое слово this.

Например:

class A { 	public: 	int i;	Func1();}
A:: Func1() { return this->i; }  
    // this - указатель класса A

Конструкторы класса

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

Деструктором называется метод, вызываемый при разрушении объекта данного класса. Имена конструктора и деструктора совпадают с именем класса, но перед именем деструктора указывается символ ~.

При создании объектов последовательно вызываются конструкторы всех его базовых классов. Вызов деструкторов при уничтожении объекта происходит в обратном порядке.

Если конструктор базового класса имеет список параметров, то для его использования в производном классе следует создать конструктор производного класса с таким же списком параметров.

При создании нового класса среда Visual C++ автоматически создает заголовочный файл и файл реализации класса с конструктором и деструктором без параметров.

Создание объекта

Для создания объекта (экземпляра данного класса) следует объявить переменную типа указатель на класс, а затем создать объект, выполнив оператор new с указанием используемого конструктора.

Например:

A* ca;
ca= new A();

Эти же действия можно записать одним оператором.

Например:

A* ca= new A();

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

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >