Включення: класи в класах
Далі ми обговоримо включення, хоча воно й не має прямого стосунку до успадковування, механізми включення та успадковування є формами взаємовідносин між класами. Тому корисно буде порівняти їх.
Якщо клас В є похідним від класу А, то ми кажемо, що клас В є частково класом А, оскільки клас В має всі характеристики класу А, а також свої власні. Тому часто успадковування називають взаємовідносинами узагальнення.
Включення називають взаємовідносинами типу «має»: бібліотека «має» книжки, або «частина цілого»: книжка є частиною бібліотеки.
В ООП включення з’являється, якщо один об’єкт є атрибутом іншого об’єкту. Розглянемо випадок, коли об’єкт класу А є атрибутом класу В:
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; просмотров: 649;