Иерархия классов
На основе принципа наследования может быть построена иерархия классов.
Рассмотрим пример базы данных служащих некоторой компании. В ней существует три категории служащих: менеджеры, занимающиеся продажами, ученые, занимающиеся исследованиями и рабочие, занятые изготовлением товаров.
Иерархия будет состоять из базового типа: employee и трех производных классов: manager, scientist и laborer.
#include <iostream>
using namespace std;
const int len=80;
class employee
{ private:
int nom;
char name[len];
public:
void getdata()
{ cout<<"vvod N: "; cin>>nom;
cout<<"vvod FIO: "; cin>>name; }
void putdata()
{cout<<" N: " <<nom;
cout<<"\n FIO: "<<name;
}
};
class manager:public employee
{ private:
char title[len];
int kol;
public:
void getdata()
{ employee::getdata();
cout<<"vvod dolgnosty: "; cin>>title;
cout<<"vvod kolvo: "; cin>>kol;
}
void putdata()
{ employee::putdata();
cout<<"\n dolgnosty: "<<title;
cout<<"\n kol-vo prodag: " <<kol;
}
};
class scientist:public employee
{ private:
int pubs;
public:
void getdata()
{ employee::getdata();
cout<<"vvod kolva pubs: "; cin>>pubs;
}
void putdata()
{ employee::putdata();
cout<<"\n publication: "<<pubs;
}
};
class laborer:public employee
{ };
int main(int argc, char *argv[])
{ employee x;
manager y;
scientist z;
laborer w;
cout<<"vvod svedenij o 4 sotrudnikax:\n";
x.getdata();
y.getdata();
z.getdata();
w.getdata();
cout<<"vivod information about sotrudnikax:\n";
x.putdata();
y.putdata();
z.putdata();
w.putdata();
return 0;
}
Производный класс может являться базовым для других производных классов.
Например:
class A
{ … };
class B: public A
{ …};
class C:public B
{…};
Здесь класс B является производным класса А, а класс С производным класса B.
Класс может являться производным как одного базового класса, так и нескольких базовых классов (множественное наследование).
Например:
class A
{ … };
class B
{ …};
class C: public A, public B
{…};
Базовые классы перечисляются через запятую после знака :
Работа с объектами чаще всего производится через указатели, например:
employee *р;
Указателю на базовый класс можно присвоить значение адреса объекта любого производного класса:
р = new laborer; или p=&y;
Где y описана, как: manager y;
Обращение к методу через указатель имеет вид:
p->getdata();
P->putdata();
Дата добавления: 2015-02-10; просмотров: 691;