- •Int count;
- •Void SetCount ( int n)
- •Int GetCount(void)
- •Void changCount(int n)
- •Void ChangeCount(int n)
- •Int secondCount;
- •Void ChangCount(int n)
- •Int count;
- •Void fa(void);
- •Void fв(void);
- •Void fc(void);
- •Void f (void);
- •Void g(void);
- •Void Display(void)
- •Void Display(void)
- •Void Display(void);
- •Void tState::Display(void)
- •Void Display(void);
- •Void Display(void);
- •Void tPopulation::Display(void)
- •Наследуемые производным классом
- •Virtual void vf();
- •Virtual void vf();
- •Virtual void vf();
- •Virtual void Draw();
- •Virtual void Draw();
- •Virtual void Draw();
- •Int value;
- •Int GetValue(void) {return value; }
- •Int multiplier ;
- •Int GetValue(void) {return value *multiplier; }
- •Virtual void f1(void);
- •Void AbstractClass::f1(void)
- •Void MyClass::f2(void)
- •5://Неполные объявления класса
- •6: Class tElem ;
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); }