Включення: класи в класах

Далі ми обговоримо включення, хоча воно й не має прямого стосунку до успадковування, механізми включення та успадковування є формами взаємовідносин між класами. Тому корисно буде порівняти їх.

Якщо клас В є похідним від класу А, то ми кажемо, що клас В є частково класом А, оскільки клас В має всі характеристики класу А, а також свої власні. Тому часто успадковування називають взаємовідносинами узагальнення.

Включення називають взаємовідносинами типу «має»: бібліотека «має» книжки, або «частина цілого»: книжка є частиною бібліотеки.

В ООП включення з’являється, якщо один об’єкт є атрибутом іншого об’єкту. Розглянемо випадок, коли об’єкт класу А є атрибутом класу В:

class A

{ };

class B

{ A objA;

}

 

Використаємо в програмі 17.9 включення замість успадковування. Класи manager та scientist є похідними класів employce та student. В новій програмі 17.13 ці класи міститимуть копії класів employce та student як атрибути.

Далі приведений лістінг програми 17.13.

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

const int LEN=80;

class student

{private:

char school[LEN];

char degree[LEN];

public:

void getedu()

{cout<<”School:”;

cin>>school;

cout<<”Degree:”;

cin>>degree;

}

void putedu() const

{cout<<”\nSchool=”<<school;

cout<<”\nDegree=”<<degree<<endl;

}

};

//////////////

class employce

{private:

char name[LEN];

unsigned long number;

public:

void getdata()

{cout <<”\nВведіть ПІП: “;cin>>name;

cout <<”\nВведіть номер: “;cin>>number;

}

void putdata() const

{cout<<”\nПІП=”<<name;

cout<<”\nНомер=”<<number;

}

};

//////////////

class manager

{private:

char title[LEN];

double dues;

employce emp;

student stu;

public:

void getdata()

{emp.getdata();

cout<<”\nПосада=”;cin>>title;

cout<<”\nВнески=”;cin>>dues;

stu.getedu();

}

void putdata() const

{emp.putdata();

cout<<”\nПосада=”<<title;

cout<<”\nВнески=”<<dues;

stu.putedu();

}

};

///////////

class scientist

{private:

int puts;

employce emp;

student stu;

public:

void getdata()

{ emp.getdata();

cout<<”\nПублікації=”;cin>>puts;

stu.getedu();

}

void putdata() const

{ emp.putdata();

cout<<”\nПублікації=”<<puts;

stu.putedu();

}

};

////////////

class laborer

{private:

employce emp;

public:

void getdata()

{emp.getdata();}

void putdata() const

{emp.putdata();}

};

 

////////////

int main()

{clrscr();

manager m1;

scientist s1,s2;

laborer l1;

cout<<endl;

cout<<”\nManager 1:”;

m1.getdata();

 

cout<<”\nScientist 1:”;

s1.getdata();

 

cout<<”\nScientist 2:”;

s2.getdata();

 

cout<<”\nLaborer 1:”;

l1.getdata();

 

cout<<”Manager1\n”;

m1.putdata();

cout<<”Scientist1\n”;

s1.putdata();

cout<<”Scientist2\n”;

s2.putdata();

cout<<”Laborer1\n”;

l1.putdata();

bioskey(0);

return 0;

}

Програма 17.13

 

 

Класи manager та scientist містять члени об’єктного типу

employce emp;

student stu;

 








Дата добавления: 2015-08-26; просмотров: 594;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.011 сек.