Имеет место т.н. наследование классов. Причем производные классы, в свою очередь, могут быть базовыми для других производных от них классов. Синтаксис наследования имеет следующий вид:
сlassBase
{
.
.
.
};
сlassDerived: ключ_доступа Base
{
.
.
.
};
Ключ_доступа не является обязательным и может быть private, protected или public. Если он не указан, то по умолчанию принимается private для классов и public для структур.
Ключ_доступа определяет уровень доступа к элементам базового класса. Ниже приводится таблица с вариантами доступа.
Ключ_доступа |
Доступ в базовом классе |
Доступ в производном классе |
public |
рublic рrotected private |
рublic рrotected private |
protected |
рublic рrotected private |
рrotected рrotected private |
private |
рublic рrotected private |
рrivate рrivate рrivate |
В последнем случае имеет место доступ лишь к членам-функциям базового класса (если они в области действия метки доступа рublic).
Наследование бывает простым и множественным. Простым наследованием называется случай, когда производный класс имеет всего один базовый класс. При множественном наследии класс является производным от нескольких базовых классов.
Пример.
сlass А
{
.
.
.};
сlass В
{
..
.
};
сlass С: рublic А, рublic В
{
.
.
};
Здесь класс Сявляется производным от базовых для него классов А и В. Рассмотрим пример простого наследования. Базовый - class man. Производный - сlass student. Напомним, что метка доступа рrotected в базовом классе позволяет иметь доступ из производного класса к элементам базового, находящимся в области действия этой метки.
#include <stdio.h>
class man
{
рrotected:
char *name;//имя
char *address;//адрес
int age;//возраст
рublic:
void get_man_info()
{
name=new char[15];
address=new char[20];
puts("Введите имя");
fflush(stdin);
scanf("%s",name);
puts("Введите адрес");
fflush(stdin);
scanf("%s", address );
puts("Введите возраст");
scanf("%i", &age );
}
void put_man_info()
{
printf("Имя человека %s.Его адрес % s. Возраст %i\n", name, address, age);
}
}:
//Закончилось описание класса man
class student:public man
{
char *group; //группа
рublic:
void get_stud_info()
{
group = new char[10];
puts("Введите группу");
fflush(stdin);
scanf("%i",group );
}
void put_stud_info()
{
printf("Имя студента %s.Его адрес % s. возраст. Учится в группе% s \n",name,address,age, group);//
Используются элементы-данные из базового класса.
}
}
voidmain
{
manx;//Элемент базового класса
x.get_man_info();
x.put_man_info();
studenty; //Элемент производного класса
y.get_man_info();
y.get_stud_info();
y.put_stud_info();
}
Здесь объект производного класса y вызывает функцию get_man_info(), являющуюся членом-функцией базового класса man. При вызове y.put_stud_info() будут выведены y.name, y.address, y.age и y.group.
В принципе, class student мог бы быть базовым, например, для class stud_sport (студент-спортсмен). Для этого в class student метку доступа к элементу данных group нужно сделать рrotected. Тогда объекты класса stud_sport смогут использовать элементы-данные и члены-функции как класса student, так и класса man, являющегося базовым для класса student.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.