Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лек_3_слайды.doc
Скачиваний:
1
Добавлен:
17.11.2019
Размер:
457.73 Кб
Скачать

Void ChangeCount(int n)

{SetCount(GetCount() + n); }

};

реализация конструктора TDerived() отдельно.

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

TDerived::TDerived()

// Заголовок конструктора

: TBase()

// Вызов конструктора базового

//класса, т.к. класс TDerived выводится с класса TBase

{

// В этом месте выполняется

//операторы конструктора

}

Первая строка реализации конструктора начинается с имени класса и оператора разрешения области видимости (TDerived::), за которым следует имя конструктора (TDerived()). Поскольку класс TDerived выводится с класса TBase, новый конструктор должен вызывать конструктор базового класса имена так, как это было продемонстрировано. Этот вызов обеспечивает инициализацию соответствующим образом всех членов, наследованных с базового класса. В данном случае конструктор базового класса устанавливает закрытый член count равным нулю.

Использование функций членов производного класса

Производный класс наследует count из базового класса.

Конечно, поскольку count закрыт в TBase, в TDerived нельзя получить к нему непосредственный доступ. Только члены класса могут иметь доступ к закрытым членам этого же класса.

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

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

class TDerived: public TBase {

private:

// новый закрытый член

Int secondCount;

public:

TDerived();

// Конструктор производного класса

// новая ф-ция-член ,т.к. Count закрыт

Void ChangCount(int n)

{ SetCount(GetCount() + n); }

};

TDerived наследует свойства TBase, включая закрытый член базового класса count.

В новом классе добавился новый закрытый член secondCount.

Для инициализации закрытый член secondCount новый конструктор можно реализовать так:

TDerived:: TDerived()

// Заголовок конструктора

: TBase()

// Инициализация данных-членов

//TBase

{

secondCount 0;

// Инициализация данных-членов

//TDerived

}

Вызов конструктора TBase() инициализирует объекта класса TBase. Оператор присваивания члену secondCount в конструкторе производного класса инициализирует объект класса TDerived. Конструктор базового класса должен вызываться первым, что обеспечит инициализацию всех наследуемых членов до того, как будут инициализированы члены производного класса.

Рис. 3.5 демонстрирует родственные взаимосвязи между классами TBase и TDerived.

В новом классе TDerived также объявлена открытая функция-член ChangeCount для увеличения и уменьшения значения члена Count, наследованного из класса TBase. Конечно, поскольку count закрыт в классе TBase, в функции ChangeCount() нельзя не получить непосредственный доступ к этому члену.

нельзя написать функцию-член ChangeCount() следующим образом:

void ChangeCount(int n)

{ count += n; } // ??

Этот оператор вызовет сообщение об ошибке при компиляции, поскольку член Count закрыт в базовом классе, и только член TBase могут иметь непосредственный доступ к count. Для изменения члена count, функция-член ChangeCount() может вызвать незакрытые наследуемые функции-члены, подобные SetCount() и GetCount():

void ChangeCount(int n)

{ SetCount(GetCount() + n); }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]