08 наследование 2
.pdf08 – 1
3.5. Переопределение функций БК в ПК. Пример:
// БК; представляет сотрудника НГТУ
class Worker { protected:
char *fam, *name; public:
Worker(char *, char *); ~Worker();
void print(); };
08 – 2
Worker::Worker(char *f, char *n)
{
fam = new char [strlen(f)+1]; if(!fam) return;
strcpy(fam, f);
name = new char [strlen(n)+1]; if(!name) return;
strcpy(name, n);
}
08 – 3
Worker::~Worker()
{
delete [] fam; delete [] name;
}
void Worker::print()
{
cout << fam << ’ ’ << name;
}
08 – 4
//ПК; представляет преподавателя
//с почасовой оплатой
class Teacher: public Worker {
float |
hours; |
// |
число рабочих часов |
float |
wage; |
// |
почасовая ставка |
public:
Teacher (char *, char *, float, float);
float getPay(); |
// |
вычисление зарплаты |
void print(); |
// |
переопределенная ФЭ |
}; |
|
|
08 – 5
//Конструктор ПК с явным вызовом
//конструктора БК
Teacher::Teacher(char *f, char *n, float h, float w): Worker(f, n)
{ hours = h; wage = w; }
float Teacher::getPay() { return hours * wage; }
08 – 6
// Переопределенная ФЭ БК
void Teacher::print()
{
// Вызов не переопределенной ФЭ БК
cout << ”Worker::print()” << endl; Worker::print();
cout << ” – преподаватель с оплатой ”
<<getPay() << ”руб. в неделю”
<<endl;
}
08 – 7
int main()
{
Teacher t(”Петров”, ”Иван”, 40., 80.);
t.print(); return 0;
}
08 – 8
Worker::print()
Петров Иван – преподававтель с оплатой 3200 руб.в неделю
08 – 9
3.6.Открытые, защищенные и закрытые БК
1)СТАТУС ЭЛЕМЕНТА БКВНУТРИ ПК
Статус |
Тип наследования |
||
элемента в |
public |
protected |
private |
БК |
|||
public |
public |
protected |
private |
protected |
protected |
protected |
private |
private |
Невидим в |
Невидим в |
Невидим в |
ПК |
ПК |
ПК |
|
|
2) ПРЯМОЙ И КОСВЕННЫЙ БК |
|
08 – 10
3.7. Поведение конструкторов и деструкторов при наследовании
ПОВЕДЕНИЕ КОНСТРУКТОРОВ:
1)Наследование конструкторов ?
2)Явный и неявный вызов конструктора БК
3)Список инициализаторов элементов
4)Конструктор с умолчанием для БК
5)Конструктор по умолчанию для ПК