ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Π‘++

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡ΠΊΠ°ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ΠΈΡ€Ρ‚ΡƒΠ°ΠΌΠ»ΡŒΠ½ΠΎΠ΅ наслСмдованиС (Π°Π½Π³Π». virtual inheritance) Π² ΡΠ·Ρ‹ΠΊΠ΅ программирования C++ — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² наслСдования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹Ρ… Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ возмоТности мноТСствСнного наслСдования (особСнно «Ρ€ΠΎΠΌΠ±ΠΎΠ²ΠΈΠ΄Π½ΠΎΠ³ΠΎ наслСдования»), ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ нСоднозначности Ρ‚ΠΎΠ³ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ· ΡΡƒΠΏΠ΅Ρ€ΠΊΠ»Π°ΡΡΠΎΠ² (нСпосрСдствСнных классов-ΠΏΡ€Π΅Π΄ΠΊΠΎΠ²) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Оно… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Π‘++ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π° β„–1

Π’Π΅ΠΌΠ°: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ классов ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Π—Π°Π΄Π°Ρ‡Π° 1

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ классы для описанных Π½ΠΈΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΠ»Π°ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ set (…), get (…), show (…). ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΡΡ‚ΠΈΠΌ классом. Класс соотвСтствуСт ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ.

1. Student: Ѐамилия, Имя, ΠžΡ‚Ρ‡Π΅ΡΡ‚Π²ΠΎ, Π”Π°Ρ‚Π° роТдСния, АдрСс, Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ Π±Π°Π»Π», Π€Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚, ΠšΡƒΡ€Ρ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ являСтся Π»ΠΈ студСнт «Π΄Π²ΠΎΠ΅Ρ‡Π½ΠΈΠΊΠΎΠΌ», «Ρ‚Ρ€ΠΎΠ΅Ρ‡Π½ΠΈΠΊΠΎΠΌ», «Ρ…ΠΎΡ€ΠΎΡˆΠΈΡΡ‚ΠΎΠΌ», «ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΈΠΊΠΎΠΌ».

#include

using namespace std;

class student {

char fam[10];

char im[10];

char otch[10];

char datarog[10];

char adress[10];

double ball;

char fak[10];

char kurs[10];

public:

void set (char fam[10], char im[10], char otch[10], char datarog[10], char adress[10], double ball, char fak[10], char kurs[10])

{

strcpy (this->fam, fam);

strcpy (this->im, im);

strcpy (this->otch, otch);

strcpy (this->datarog, datarog);

strcpy (this->adress, adress);

this->ball=ball;

strcpy (this->fak, fak);

strcpy (this->kurs, kurs);

}

int get_rec (char f[10], char i[10], char o[10], char d[10], char ad[10], double & ba,

char faki[10], char ku[10])

{strcpy (f, fam);

strcpy (i, im);

strcpy (o, otch);

strcpy (d, datarog);

strcpy (ad, adress);

ba=ball;

strcpy (faki, fak);

strcpy (ku, kurs);

}

void show ()

{cout<< «informziyu"<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

void red (double ball)

void red1 (double ball) {if ((ball>4)||(ball<=5)) {cout<< «horoshist"<

else {cout<< «troeishnik"<

void red3 (double ball) {if (ball==5) cout<< «otlichnik"<

};

int main () {

student wee;

char a[10];

char b[10];

char c[10];

char d[10];

char q[10];

double w;

char e[10];

char t[10];

cout<< «vvedite dannie»;

cout<< «_____» <

cout<< «familiya"<

cin>>a;

cout<< «imya"<

cin>>b;

cout<< «otchestvo"<

cin>>c;

cout<< «datarog"<

cin>>d;

cout<< «adress"<

cin>>q;

cout<< «ball"<

cin>>w;

cout<< «fak"<

cin>>e;

cout<< «kurs"<

cin>>t;

wee.set (a, b, c, d, q, w, e, t);

wee.red (w);

wee.red1 (w);

wee.red3 (w);

wee.show ();

return 0;

}

Π—Π°Π΄Π°Π½ΠΈΠ΅ 2

1. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ класс ΠΏΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Π½ΠΈΠΆΠ΅ заданию Π² ΡΠΎΠΎΡ‚вСтствии с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для Π½Π΅Π³ΠΎ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, конструктор ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ прСобразования.

2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ класса для Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‡Π»Π΅Π½ΠΎΠ²-Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ объявлСния класса.

3. Π‘ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая опрСдСляСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ… Π½Π° ΡΠΊΡ€Π°Π½. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструктор ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ — ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° своСго ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊ Ρ‚ΠΈΠΏΡƒ своСго класса, Π° Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ — Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ….

4. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ соотвСтствиС Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. 5. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π²Π½Π΅ объявлСния класса ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

6. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠ°ΠΊ «Π΄Ρ€ΡƒΠ·Π΅ΠΉ» класса с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

7. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠ°ΠΊ «Π΄Ρ€ΡƒΠ·Π΅ΠΉ» класса с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

#include

using namespace std;

class comchislo

{

double x;

double y;

public:

comchislo (double x, double y)

{

this->x=x;

this->y=y;

}

void set (double x, double y)

{

this->x=x;

this->y=y;

}

void get1 (double &x, double &y)

{

this->x=x;

this->y=y;

}

void show ()

{

cout<< «z="<< «+i*» <

}

void set_s1 (double x, double y);

void get_s1 (double &x, double &y);

friend void vivod (comchislo o);

};

void comchislo: set_s1 (double x, double y)

{

this->x=x;

this->y=y;

}

void comchislo: get_s1 (double &x, double &y)

{

this->x=x;

this->y=y;

}

void vivod (double x, double y)

{

cout<< «z="<< «+i*» <

}

int main ()

{

double x, y;

comchislo o (0,0);

o.show ();

cout<< «Vvedite mnimoe i realnoe chislo"<

cin>>x>>y;

o.set (x, y);

o.show ();

o.set_s1 (x, y);

vivod (x, y);

return 0;}

Анология

#include

using namespace std;

class comchislo

{

double x;

double y;

public:

comchislo (double x, double y)

{

this->x=x;

this->y=y;

}

void set (double x, double y)

{

this->x=x;

this->y=y;

}

void get1 (double &x, double &y)

{

this->x=x;

this->y=y;

}

double tim (double x, double y) {

return (x+y)/2−45;}

void show ()

{

cout<< «z="<< «+i*» <

}

};

int main ()

{

double k, z, p, p1;

double x, y;

comchislo o (0,0);

o.show ();

cout<< «Vvedite mnimoe i realnoe chislo"<

cin>>x>>y>>k>>z;

o.set (x, y);

p=o.tim (x, y) — o. tim (x, k)+2*o.tim (z, y);

cout<

p1=o.tim (k, z) — o. tim (k, y)+o.tim (y, y) — o. tim (x, x);

cout<

x=p;

y=p1;

o.show ();

return 0;

}}

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1) Π§Ρ‚ΠΎ прСдставляСт собой класс?

Класс являСтся описываСмой Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (пространства ΠΈΠΌΡ‘Π½) исходного ΠΊΠΎΠ΄Π° модСлью Π΅Ρ‰Ρ‘ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ сущности (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). ЀактичСски ΠΎΠ½ ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ устройство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, являясь своСго Ρ€ΠΎΠ΄Π° Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠΎΠΌ. Говорят, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ — это экзСмпляр класса. ΠŸΡ€ΠΈ этом Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… систСмах класс Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ посрСдством динамичСской ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ классы Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ соотвСтствовали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области.

2) КакиС спСцификации доступа ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ описании класса Π’ ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках программирования (Π² Ρ‚ΠΎΠΌ числС Π² php, Java, C++, Oberon, Python, Ruby, Smalltalk, Object Pascal) созданиС класса сводится ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ структуры, содСрТащСй Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (срСди послСдних ΠΎΡΠΎΠ±ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΈΠ³Ρ€Π°ΡŽΡ‚ конструкторы, дСструкторы, Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹). ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΈΠΉ шаблон, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ — экзСмпляры Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. ВсС экзСмпляры ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса созданы ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, поэтому ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

private (Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ‡Π»Π΅Π½ класса) — обращСния ΠΊ Ρ‡Π»Π΅Π½Ρƒ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ этот Ρ‡Π»Π΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½. Π›ΡŽΠ±Ρ‹Π΅ наслСдники класса ΡƒΠΆΠ΅ Π½Π΅ ΡΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΡΡ‚ΠΎΠΌΡƒ Ρ‡Π»Π΅Π½Ρƒ. НаслСдованиС ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ private Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ доступ ΠΈΠ· Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ класса ΠΊΠΎ Π²ΡΠ΅ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄Π°ΠΆΠ΅ public-Ρ‡Π»Π΅Π½Ρ‹ (Π‘++);

protected (Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ‡Π»Π΅Π½ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов) — обращСния ΠΊ Ρ‡Π»Π΅Π½Ρƒ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ этот Ρ‡Π»Π΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ· Π»ΡŽΠ±Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΅Π³ΠΎ классов-наслСдников. НаслСдованиС ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ protected Π΄Π΅Π»Π°Π΅Ρ‚ всС public-Ρ‡Π»Π΅Π½Ρ‹ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса protected-Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса-наслСдника (Π‘++);

public (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ‡Π»Π΅Π½ класса) — обращСния ΠΊ Ρ‡Π»Π΅Π½Ρƒ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ· Π»ΡŽΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. НаслСдованиС ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ public Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса (Π‘++);

3) Π§Ρ‚ΠΎ являСтся элСмСнтами класса?

ΠŸΡ€ΠΈ использовании классов всС элСмСнты ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, константы, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ (Π° Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках обязаны ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ) Ρ‚ΠΎΠΌΡƒ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌΡƒ классу. Π‘Π°ΠΌ класс Π² ΠΈΡ‚ΠΎΠ³Π΅ опрСдСляСтся ΠΊΠ°ΠΊ список своих Ρ‡Π»Π΅Π½ΠΎΠ², Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅ΠΉ (свойств) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² / Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ / ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΡΠ·Ρ‹ΠΊΠ° программирования ΠΊ ΡΡ‚ΠΎΠΌΡƒ списку ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒΡΡ константы, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΠ΅ опрСдСлСния

4) Как осущСствляСтся доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ класса ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π² ΠΊΠ»Π°ΡΡΠ°Ρ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ — Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ set ΠΈ get Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнтами Π΄Π°Π½Π½Ρ‹Ρ…. set-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…, get-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ значСния элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ класс CppStudio Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π½Ρ‘ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Ρ‚Ρƒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π΄Π΄. ΠΌΠΌ. Π³Π³. Для измСнСния ΠΈ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π° Π΄Π°Ρ‚Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ соотвСтствСнно set ΠΈ get Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

5) Для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ this

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ *this создаСтся автоматичСски ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄

6) Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ конструктор Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ конструктор класса (ΠΎΡ‚ Π°Π½Π³Π». constructor, ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠΎΠΊΡ€Π°Ρ‰Π°ΡŽΡ‚ ctor) — ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ инструкций, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ схоТ с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΠΎΡ‚личаСтся ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ся, ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° для рассматриваСмых ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²

7) Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ дСструктор ДСструмктор — ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, слуТащий для Π΄Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ освобоТдСния памяти).

8) КакиС классы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ друТСствСнными Π’ C++ сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ классов ΠΈ Π΄Π°ΠΆΠ΅ классы (Π² ΡΡ‚ΠΎΠΌ случаС Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌ мноТСствС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² класса), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ доступ ΠΊ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ систСмы управлСния доступом ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ «Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΠ˜ΠšΠžΠ“Πž, ΠšΠ ΠžΠœΠ•». Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΊΠ»Π°ΡΡΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ друТСствСнными функциями ΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π° β„–2

Π’Π΅ΠΌΠ°: ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ класс Ρ†Π΅Π»Ρ‹Ρ… чисСл. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ «++» ΠΈ «+», ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса, Π°" - - «ΠΈ «-» ΠΊΠ°ΠΊ друТСствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ осущСствлСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса, Ρ‚Π°ΠΊ ΠΈ Ρ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ встроСнного Ρ†Π΅Π»ΠΎΠ³ΠΎ.

#include

using namespace std;

class zel

{

int f;

public:

zel () {f=0;}

zel (int f) {this->f=f;}

int get_zel () {return f;}

void set_zel (int f) {this->f=f;}

void show () {cout<< «F="<

int zel: operator ++(int a)

{

return a=a+a+a;

}

int zel: operator +(int a)

{

return a=a+3;

}

int zel: operator — (int a)

{int t;

t=a-a-a;

return t;

}

int zel: operator — (int a)

{

return a=a-5;

}

};

int main ()

{

zel a;

zel b;

int c;

cout<< «Vvedite a v formate"<

cin>>c;

int x;

cout<< «Vvedite b v"<

cin>>x;

a.set_zel (c);

b.set_zel (x);

a.show ();

b.show ();

c++;

cout<

cout<<

c -;

cout<

cout<

system («pause»);

return 0;

}

«ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠ΅ число» — Complex. Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько конструкторов ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для слоТСния, вычитания, умноТСния, дСлСния, присваивания. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π° размСрности n ΠΈΠ· ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая выполняСт слоТСниС комплСксных Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ².

#include

#include

#include

class Complex

{

private:

double real; // Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ

double image; // Мнимая Ρ‡Π°ΡΡ‚ΡŒ

public:

Complex () {}; // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Complex (double r) {real = r; image = 0;} // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

Complex (double r, double i) {real = r, image = i;} // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

~Complex () {} // ДСструктор

Complex operator+(Complex &); // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° слоТСния

Complex operator — (Complex &); // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° вычитания

Complex operator*(Complex &); // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° умноТСния

Complex operator/(Complex &); // ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° дСлСния

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° << для Π²Ρ‹Π²ΠΎΠ΄Π° класса Complex

friend ostream &operator<<(ostream &, Complex &);

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° >> для Π²Π²ΠΎΠ΄Π° класса Complex

friend istream &operator>>(istream &, Complex &);

};

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° +

Complex Complex: operator+(Complex &fp1)

{

fp1.real = real + fp1. real;

fp1.image = image + fp1. image;

return fp1;

}

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ;

Complex Complex: operator — (Complex &fp1)

{

fp1.real = real — fp1. real;

fp1.image = image — fp1. image;

return fp1;

}

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° *

Complex Complex: operator*(Complex &fp1)

{

double i, j;

i = real * fp1. real — image * fp1. image;

j = real * fp1. image + fp1. real * image;

fp1.real = i;

fp1.image = j;

return fp1;

}

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° /

Complex Complex: operator/(Complex &fp1)

{

double k, i, j;

k = fp1. real * fp1. real + fp1. image * fp1. image;

i = (real * fp1. real + image * fp1. image) / k;

j = (fp1.real * image — real * fp1. image) / k;

fp1.real = i;

fp1.image = j;

return fp1;

}

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° <<

ostream &operator<< (ostream &fo, Complex &fp)

{

if (fp.image < 0) fo << fp. real << «+i („<< fp. image <<οΏ½“)n»;

else fo << fp. real << «+i» << fp. image << «n»;

return fo;

}

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° >>

istream &operator>>(istream &fi, Complex &fp)

{

cout << «vvedite deystvinui chasty:»;

fi >> fp. real;

cout << «vvedite mnimui chasty:»;

fi >> fp. image;

return fi;

}

void main ()

{

//clrscr ();

// ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹Π΅ числа

Complex c1, c2, c3, c4, c5;

// Π’Π²ΠΎΠ΄ комплСксных чисСл

cin >> c1;

cin >> c2;

cin >> c3;

cin >> c4;

cin >> c5;

// Π’Ρ‹Π²ΠΎΠ΄ комплСксных чисСл

cout << «nc1 =» << c1;

cout << «c2 =» << c2;

cout << «c3 =» << c3;

cout << «c4 =» << c4;

cout << «c5 =» << c5 << 'n';

// cout << «ΠœΠΎΠ΄ΡƒΠ»ΡŒ c1:» << c1. abs () << «nn»;

// Π’Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

Complex k;

K=c1+c2;

cout << «c1 + c2 =» << k;

k=c1-c2;

cout << «c1 — c3 =» << k;

k=c1*c2;

cout << «c1 * c4 =» << k;

k=c1/c2;

cout << «c1 / c5 =» << k;

getch ();}

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1) ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° состоит Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ смысла ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° плюс (+), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² C++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для слоТСния) ΠΏΡ€ΠΈ использовании Π΅Π³ΠΎ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ классом

2) Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ сущСствованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, достаточно ввСсти Π² ΡΠ·Ρ‹ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ опСрация (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, функция ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€) ΠΎΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ компилятором Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ (ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ), Π½ΠΎ ΠΈ ΠΏΠΎ Ρ‚ΠΈΠΏΠ°ΠΌ ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, abs (i), Π³Π΄Π΅ i ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅, ΠΈ abs (x), Π³Π΄Π΅ x ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ вСщСствСнноС — это Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π² ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²ΠΊΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… слоТностСй.

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти Π² ΡΠ·Ρ‹ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ синтаксичСскиС конструкции. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достаточно ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΏΠΎ ΡΡƒΡ‚ΠΈ ΠΎΠ½ΠΈ Π½ΠΈΡ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, достаточно ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ запись Π²ΠΈΠ΄Π° «<οΏ½ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1> <οΏ½Π·Π½Π°ΠΊΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ> <οΏ½ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2>» ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «<οΏ½Π·Π½Π°ΠΊΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ>(<οΏ½ΠΎΠΏΠ΅Ρ€Π°Π½Π΄1>,<οΏ½ΠΎΠΏΠ΅Ρ€Π°Π½Π΄2>)». Достаточно Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ программисту ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ — ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° описания Ρ€Π΅ΡˆΠ΅Π½Π°.

3) ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹:

+ - * /% ^ & | ~! = < >

+= -= *= /=%= ^= &= |=

<< >> >>= <<= ==≠ <= >=

&& || ++ - ->*, -> [] ()

new new[] delete delete[]

А Π½Π΅Π»ΡŒΠ·Ρ (подсмотрСл Ρƒ Π‘трауструпа):

: (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ области видимости)

(Π²Ρ‹Π±ΠΎΡ€ Ρ‡Π»Π΅Π½Π°)

* (Π²Ρ‹Π±ΠΎΡ€ Ρ‡Π»Π΅Π½Π° Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‡Π»Π΅Π½)

?: Ρ‚Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

sizeof, typeid

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π° β„–3

Π’Π΅ΠΌΠ°: ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ класс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΡ‚Π΅ΠΊΠΎΠΌ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ стСка — Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ класс для Π²Ρ‹Π²ΠΎΠ΄Π° Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΡ… сСрий ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл: a) Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС;

#include «stdafx.h»

#include «stdio.h»

#include «iostream»

using namespace std;

// элСмСнт для стэка

struct elem {

int data;

struct elem* next;

};

// класс стэка

class lifo {

private:

struct elem* begin;

public:

// Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠ· ΡΡ‚Π΅ΠΊΠ°

struct elem* get () {

struct elem* rez;

if (begin≠NULL) {

rez=begin;

}

else {

rez=NULL;

}

return rez;

};

// поиск элСмСнта

struct elem* search_elem (int idata) {

struct elem* curr;

curr=begin;

while ((curr->data≠idata)&&(curr≠NULL)) {

curr=curr->next;

};

return curr;

};

// функция создания

struct elem* create_lifo () {

struct elem* rez;

rez = new struct elem;

rez->next=NULL;

return rez;

};

// функция добавлСния

void set (int data) {

struct elem* rez;

rez=create_lifo ();

rez->data=data;

rez->next=begin;

begin=rez;

};

// ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта

void del1 () {

struct elem* temp;

temp=begin;

if (begin->next≠NULL) {

begin=begin->next;

}

else {

begin=NULL;

}

delete temp;

};

// ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ элСмСнта

void del2 (int idata) {

struct elem* curr;

struct elem* temp;

curr=begin;

temp=search_elem (idata);

while ((curr->next≠temp)&&(curr->next≠NULL)) {

curr=curr->next;

};

curr->next=temp->next;

if (temp==begin) {

begin=begin->next;

}

delete temp;

};

// просмотр стeΠΊa

void write_lifo () {

struct elem* curr;

curr=begin;

cout << «NACHALO» << endl;

while (curr≠NULL) {

cout << curr->data << endl;

curr = curr->next;

}

cout << «KONEC» << endl;

};

// сортировка

struct elem* find_max (struct elem* curr) {

struct elem* max=curr;

do {

if (curr->data>max->data) {

max=curr;

}

curr=curr->next;

} while (curr≠NULL);

return max;

};

void sort_lifo () {

struct elem *max, *curr, *temp, *ntemp;

curr=begin;

do {

max=find_max (curr);

if (max≠curr) {

temp=curr;

if (max≠begin) {

while ((temp->next≠max)&&(temp->next≠NULL)) {

temp=temp->next;

};};

temp->next=max->next; // ΡƒΠ±Ρ€Π°Π»ΠΈ ΠΌΠ°Ρ… ΠΈΠ· ΡΡ‚Π΅ΠΊΠ°

temp=begin;

while ((temp->next≠curr)&&(temp->next≠NULL)) {

temp=temp->next;

};

if (temp->next≠NULL) {

temp->next=max;

max->next=curr;

} else

{

max->next=curr;

begin=max;

}

// нашли ΠΈ ΡΠΌΠ΅Π½ΠΈΠ»ΠΈ элСмСнт

curr=max;

}

curr=curr->next;

} while (curr->next≠NULL);

};

} mlifo;

// создаСм стСк

void c_lifo () {

int i=0, t;

mlifo.create_lifo ();

do {

cout << «vvedite» << i << «element (0-vyhod)» <

cin >> t;

i++;

mlifo.set (t);

} while (t≠0);

};

void add_elem () {

int t;

cout << «vvedite element» <

cin >> t;

mlifo.set (t);

}

void del_elem () {

int t;

cout << «vvedite chislo dlya udaleniya» <

cin >> t;

mlifo.del2 (t);

};

int main ()

{

int i;

bool flag=true;

do {

_flushall ();

cout << «sozdat stek (1)» << endl;

cout << «dobavit element (2)» << endl;

cout << «udalit s vershiny (3)» << endl;

cout << «pokazat stek (4)» << endl;

cout << «udalit celevoi element (5)» << endl;

cout << «sortirovka (6)» << endl;

cout << «vyhod (0)» << endl;

cin >>i;

switch (i) {

case 1: c_lifo (); break;

case 2: add_elem (); break;

case 3: mlifo. del1 (); break;

case 4: mlifo. write_lifo (); break;

case 5: del_elem (); break;

case 6: mlifo. sort_lifo (); break;

case 0: flag=false; break;

};

} while (flag);

return 0;

}

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1) C++ ссылка — это простой ссылочный Ρ‚ΠΈΠΏ, ΠΌΠ΅Π½Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ бСзопасный, Ρ‡Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, унаслСдованый ΠΎΡ‚ ΡΠ·Ρ‹ΠΊΠ° Π‘ΠΈ.

Помимо ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ указатСлям, Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ссылок ΡΠ²Π»ΡΡŽΡ‚ΡΡ списки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для Π²Ρ‹Π²ΠΎΠ΄Π° Π±Π΅Π· явного взятия адрСса Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ.

2) new — ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ динамичСской памяти Π² ΠΊΡƒΡ‡Π΅. Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΠΎΡ€ΠΌΡ‹, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ «Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ new», new пытаСтся Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ достаточно памяти Π² ΠΊΡƒΡ‡Π΅ для размСщСния Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ, Π² ΡΠ»ΡƒΡ‡Π°Π΅ успСха, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ адрСс свСТСвыдСлСнной памяти. Однако, Ссли new Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΊΡƒΡ‡Π΅, Ρ‚ΠΎ ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡΡ‚ (throw) ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° std: bad_alloc. Π­Ρ‚ΠΎ устраняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ явной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° выдСлСния.

p_var = new typename;

3) Π’ ΡΠ·Ρ‹ΠΊΠ΅ программирования C++ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΊΡƒΡ‡Ρƒ. Π’Ρ‹Π·ΠΎΠ² delete Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° new, Π΄Π°Π±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти. ПослС Π²Ρ‹Π·ΠΎΠ²Π° delete ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° ΡΡ‚ΠΎΡ‚ участок памяти, становится Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ большС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. МногиС программисты ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ 0 (Π½ΡƒΠ»ΡŒ-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ) указатСлям послС использования delete, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство ошибок программирования. Однако Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½ΡƒΠ»ΡŒ-указатСля фактичСски Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ эффСкта, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ нСобходимости ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½ΡƒΠ»ΡŒ-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ delete

int *p_var = NULL; // объявлСниС Π½ΠΎΠ²ΠΎΠ³ΠΎ указатСля

p_var = new int; // ΠΏΠ°ΠΌΡΡ‚ΡŒ динамичСски выдСляСтся

/*…

ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄

delete p_var; // ΠΏΠ°ΠΌΡΡ‚ΡŒ освобоТдаСтся

p_var = NULL; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ замСняСтся Π½Π° 0 (Π½ΡƒΠ»ΡŒ-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ)

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π° β„–4

Π’Π΅ΠΌΠ°: РСализация ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ наслСдования

Π¦Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ наслСдования, прСимущСства ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠΈ;

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ;

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ» опрСдСлСния наслСдования ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ;

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌ наслСдования;

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²;

? ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки;

? наслСдованиС ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡ — Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ.

Π—Π°Π΄Π°Ρ‡Π° Π°) Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ классов ΠΈΠ³Ρ€Π° — спортивная ΠΈΠ³Ρ€Π° — Π²ΠΎΠ»Π΅ΠΉΠ±ΠΎΠ». ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ конструкторы, дСструктор, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ классов.

#include

#include

using namespace std;

class igra

{

public:

int kol_igrokof;

igra (char *vid_igri, char *atributi, int kol_igrokof, char *vremya_igri) {

strcpy (igra:vid_igri, vid_igri);

strcpy (igra:atributi, atributi);

this->kol_igrokof=kol_igrokof;

strcpy (igra:vremya_igri, vremya_igri);};

void show_spisok (void) {cout << vid_igri << endl;

cout<

cout<

void show_kol (int) {cout << kol_igrokof << endl;};

char vid_igri[64];

char atributi[64];

char vremya_igri[64];

};

class sport_play: public igra

{

public:

sport_play (char *vid_igri, char *vremya_igri, char *tematika, int kol_igrokof, char*atributi): igra (vid_igri, atributi, kol_igrokof, vremya_igri)

{

strcpy (this->vremya_igri, vremya_igri);

strcpy (this->tematika, tematika);

strcpy (this->atributi, atributi);

this->kol_igrokof=kol_igrokof;

};

void show_sport_play (void)

{

cout << «vid igri:»;

show_spisok ();

cout<

cout <<οΏ½"tematika: «<

cout<< «kol =»;

cout<

show_kol (kol_igrokof);

cout <

};

private:

char tematika[64];

};

class volebol: public igra

{

public:

volebol (char *vid_igri, char *vremya_igri, char *kol_match, int kol_igrokof, char*atributi): igra (vid_igri, atributi, kol_igrokof, vremya_igri)

{

strcpy (volebol:vremya_igri, vremya_igri);

strcpy (volebol:kol_match, kol_match);

strcpy (volebol:atributi, atributi);

this->kol_igrokof=kol_igrokof;

};

void show_volebol (void)

{

cout << «nazvanie:»;

show_spisok ();

cout<

cout <<οΏ½"kolmatch: «<< kol_match;

cout<< «Kol =»;

cout<

show_kol (kol_igrokof);

cout <

};

private:

char kol_match[64];

};

int main (void)

{

char vid_igri[64];

char vremya_igri[64];

char kol_match[54];

char atributi[64];

char tematika[64];

int kol_igrokof;

cout<< «vid igri"<

cin>>vid_igri;

cout<< «_________________»;

cout<< «vremya"<

cin>>vremya_igri;

cout<< «_________________»;

cout<< «kolmatch"<

cin>>kol_match;

cout<< «_________________»;

cout<< «atributi"<

cin>>atributi;

cout<< «__________________»;

cout<< «tematika"<

cin>>tematika;

cout<< «__________________»;

cout<< «kol igrokof"<

cin>>kol_igrokof;

cout<< «__________________»;

igra o (vid_igri, atributi, kol_igrokof, vremya_igri);

cout<< «SPISOK"<

o.show_spisok ();

sport_play as (vid_igri, vremya_igri, tematika, kol_igrokof, atributi);

cout<< «____________________Igra"<

as.show_sport_play ();

volebol das (vid_igri, vremya_igri, kol_match, kol_igrokof, atributi);

cout<< «__________________VOLEBOL"<

das.show_volebol ();

system («pause»);

return 0;

}

b) Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ класс колСсо, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ радиус. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ конструкторы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ класс Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ колСса ΠΈ ΡΡ‚Ρ€ΠΎΠΊΡƒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΠΈΡ€ΠΌΡƒ-производитСля. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс Π³Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ Π³Ρ€ΡƒΠ·ΠΎΠΏΠΎΠ΄ΡŠΠ΅ΠΌΠ½ΠΎΡΡ‚ΡŒΡŽ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ конструкторы, дСструктор ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ классов.

#include

#include

using namespace std;

class koleso

{

public:

double rad;

koleso (double rad) {

this->rad=rad;

}

void set_rad (double rad)

{this->rad=rad;}

void show_rad (void) {

cout <<οΏ½"radius__=__>"<< endl;

};

};

class afto: public koleso

{

public:

char spisok[20];

afto (char*spisok, double rad):koleso (rad)

{

this->rad=rad;

strcpy (this->spisok, spisok);

}

void set_iz1 ()

{

this->rad=rad;

strcpy (this->spisok, spisok);

}

void show_ss (void)

{

cout <<οΏ½"radius__=__>"<< endl;

cout<<οΏ½"firma proizvoditelya__=__>"<

};

};

class gruzavto: public afto {

public:

double pod;

gruzavto (double rad, char*spisok, double pod): afto (spisok, rad)

{

this->pod=pod;

this->rad=rad;

strcpy (this->spisok, spisok);

}

void set_ss () {this->rad=rad;

strcpy (this->spisok, spisok);

this->pod=pod;}

void show_ss3 (void)

{

cout <<οΏ½"radius____=___>"<< endl;

cout<<οΏ½"firma proizvoditelya__=___>"<

cout<<οΏ½"podem___=__>"<

};

};

int main (void)

{bool t=false;

double pod;

cout<< «podem"<

cin>>pod;

double rad;

cout<< «radius"<

cin>>rad;

char spisok[20];

cout<< «spisok proizvoditelya"<

cin>>spisok;

koleso a (rad);

while (t=true)

{int d;

cout<< «vesti novi radius??? da=1 net=2"<

cin>>d;

if (d==1) {

cout<< «vvedite radius"<

cin>>rad;

a.set_rad (rad);

a.show_rad ();}

else {

break;}

}

cout<< «________________koleso"<

a.show_rad ();

afto a1 (spisok, rad);

cout<< «________________avto"<

a1.show_ss ();

while (t=true) {

int d;

cout<<οΏ½"vvesti noviq spisok??? da=1, net=2; «<

cin>>d;

if (d==1) {

cout<< «vvedite noviy spisok"<

cin>>spisok;

afto a1 (spisok, rad);

a1.show_ss ();}

else {

break;}

}

gruzavto a2 (rad, spisok, pod);

cout<< «____gruzovoeavto"<

a2.show_ss3 ();

while (t=true)

{int d;

cout<<οΏ½"vvestinoviy podem??? da=1, net=2; «<

cin>>d;

if (d==1) {cout<< «vvedite noviy podyem"<

cin>>pod;

gruzavto a2 (rad, spisok, pod);

a2.show_ss3 ();

}

else {

break;}}

cout<< «________________gruzovik"<

a2.show_ss3 ();

system («pause»);

return 0;

}

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π΅ вопросы

1) НаслСмдованиС — ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (наряду с ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΠ΅ΠΉ, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ ΠΈ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΠ΅ΠΉ), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ класс Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ), ΠΏΡ€ΠΈ этом свойства ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π·Π°ΠΈΠΌΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹ΠΌ классом.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ наслСдованиС Класс, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ наслСдованиС, называСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ (Π°Π½Π³Π». base class). ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ, наслСдниками ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ классами (Π°Π½Π³Π». derived class).

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС ΠŸΡ€ΠΈ мноТСствСнном наслСдовании Ρƒ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°. Π’ ΡΡ‚ΠΎΠΌ случаС класс наслСдуСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ всСх ΠΏΡ€Π΅Π΄ΠΊΠΎΠ². Достоинства Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΉ гибкости. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² C++. Из Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Python ΠΈ Π­ΠΉΡ„Π΅Π»ΡŒ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС поддСрТиваСтся Π² ΡΠ·Ρ‹ΠΊΠ΅ UML.

2) ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ нСсколько вСсьма Π²Π°ΠΆΠ½Ρ‹Ρ… ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, насколько Π»Π΅Π³ΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ располоТСниС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… элСмСнтов, эффСктивноС использованиС свободного пространства ΠΈ «ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ»

3) ИспользованиС наслСдования для построСния Π½ΠΎΠ²Ρ‹Ρ… классов сэкономит Π²Π°ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΠΈ ΡΠΈΠ»Ρ‹ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ наслСдованиС, позволяя вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ слоТныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π»Π΅Π³ΠΊΠΎ управляСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

4) Π’Π½ΡƒΡ‚Ρ€ΠΈ конструктора ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, указывая Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅, имя конструктора Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сразу ΠΆΠ΅ послС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° конструктора ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса.

5) ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π΅ΡΡ‚ΡŒ Π΄Π²Π° класса, А ΠΈ Π’ Ρ‚Π°ΠΊΠΈΠ΅, Ρ‡Ρ‚ΠΎ класс Π’ ΡΠ²Π»ΡΠ΅Ρ‚ся подклассом класса, А (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, отстоя Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ступСнСй), Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ прСдставитСля класса Π’ Π²ΠΌΠ΅ΡΡ‚ΠΎ прСдставитСля класса, А Π² Π»ΡŽΠ±ΠΎΠΉ ситуации, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π±Π΅Π· Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ эффСкта.

6) Π‘Π°ΠΌΡ‹ΠΉ большой нСдостаток наслСдования Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ООП — ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ фактичСски Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс опрСдСляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ класса, Π° ΡΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС ΠΌΠΎΠΆΠ΅Ρ‚ сильно ΡΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Плюс ΠΊΠΎ Π²ΡΠ΅ΠΌΡƒ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π° сильно затрудняСтся, Ссли рСализация родитСля содСрТит аспСкты нСсовмСстимыС с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ‚Π°ΠΊΠΎΠΉ ситуации Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ провСсти Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠΎΠ΄Π°, Π° ΡΡ‚ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² строится динамичСски Π·Π° ΡΡ‡Π΅Ρ‚ связывания ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ классы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΈΡ… ΠΈΠ½Ρ‚СрфСйсом. Π§Ρ‚ΠΎ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ. ИспользованиС Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ интСрфСйса позволяСт Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСимущСства ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°. Π’. Π΅. Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π° β„–5

Π’Π΅ΠΌΠ°: ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

Π¦Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ» опрСдСлСния мноТСствСнного наслСдования;

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ прСимущСств ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠΎΠ² мноТСствСнного наслСдования;

? ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ связанных с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ мноТСствСнного наслСдования;

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ;

1) Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования: студСнт, сотрудник — ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Π½Ρ‚.

#include

using namespace std;

class Student {

int mark;

char imya[20];

char fam[20];

public:

void Set_student (int mark, char *imya, char*fam)

{strcpy (this->imya, imya);

strcpy (this->fam, fam);

this->mark=mark;

}

void show1 () {

cout<< «__» << «="<

cout<< «__» << «Imya="<

cout<< «__» << «familiya="<

};

class Worker {

int salary;

double stag;

public:

void Set_Worker (int salary, double stag) {

this->salary=salary;

this->stag=stag;

}

void show2 () {

cout<< «__» << «zarplata="<

cout<< «__» << «stag="<

};

class Practicant: public Student, public Worker

{char srok[20];

int ozenka;

public:

void set_practicant (char*srok, int ozenka)

{strcpy (this->srok, srok);

this->ozenka=ozenka;

}

void show3 () {

cout<< «__» << «srok="<

cout<< «__» << «ozenk="<

}

};

int main () {

Practicant s, w;

s. Set_student (1222, «Kolya», «kinim»);

s.show1 ();

s.set_practicant («11juli», 12);

s.show3 ();

cout<< «___» <

w. Set_Worker (12 333,13);

w.show2 ();

w.set_practicant («11avg», 12);

w.show3 ();

return 0;

}

2) Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования: Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ — студСнт, сотрудник — ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Π½Ρ‚.

#include

#include

using namespace std;

class chel

{

public:

char pol[20];

chel (char *pol) {

strcpy (this->pol, pol);

}

void set_pol (char*pol)

{strcpy (this->pol, pol);}

void show_pol (void) {

cout <<οΏ½"pol__=__>"<< endl;

};

};

class student: public chel

{

public:

double stip;

char imya[20];

student (char*imya, double stip, char*pol):chel (pol)

{

strcpy (this->pol, pol);

strcpy (this->imya, imya);

this->stip=stip;

}

void set_iz1 ()

{

this->stip=stip;

strcpy (this->pol, pol);

strcpy (this->imya, imya);

}

void show01 (void)

{

cout <<οΏ½"stip__=__>"<< endl;

cout<<οΏ½"pol__=__>"<

cout<<οΏ½"imya__=__>"<

};

};

class worck: public chel {

public:

double zarp;

char stag[20];

worck (char*stag, double zarp, char*pol):chel (pol)

{

strcpy (this->pol, pol);

strcpy (this->stag, stag);

this->zarp=zarp;

}

void set_z2 ()

{

this->zarp=zarp;

strcpy (this->pol, pol);

strcpy (this->stag, stag);

}

void show02 (void)

{

cout <<οΏ½"zarp__=__>"<< endl;

cout<<οΏ½"pol__=__>"<

cout<<οΏ½"stag__=__>"<

};

};

class pract: public worck {

public:

double ozen;

char srok[20];

pract (double ozen, char*srok, char*stag, double zarp, char*pol):worck (stag, zarp, pol)

{strcpy (this->pol, pol);

strcpy (this->stag, stag);

this->zarp=zarp;

this->ozen=ozen;

strcpy (this->srok, srok);

}

void set_ss () {this->ozen=ozen;

strcpy (this->srok, srok);

strcpy (this->stag, stag);

this->zarp=zarp;

strcpy (this->pol, pol);}

void show_ss3 (void)

{

cout <<οΏ½"ozenka____=___>"<< endl;

cout<<οΏ½"srok sdachi__=___>"<

cout<<οΏ½"stag__=__>"<

cout<<οΏ½"zarplata__=__>"<

cout<<οΏ½"pol__=__>"<

};

};

int main (void)

{

double stip;

cout<< «stip"<

cin>>stip;

double zarp;

cout<< «zarplata"<

cin>>zarp;

char pol[20];

cout<< «pol"<

cin>>pol;

char imya[20];

cout<< «vvedite imya"<

cin>>imya;

char stag[20];

cout<< «vvediter stag"<

cin>>stag;

double ozen;

cout<< «vvedit ozenku"<

cin>>ozen;

char srok[20];

cout<< «vvedite srok"<

cin>>srok;

chel a (pol);

cout<< «________________chel"<

a.show_pol ();

student a1 (imya, stip, pol);

cout<< «________________student"<

a1.show01 ();

worck a3 (stag, zarp, pol);

cout<< «________________worck"<

a3.show02 ();

pract a2 (ozen, srok, stag, zarp, pol);

cout<< «_________________pract"<

a2.show_ss3 ();

system («pause»);

return 0;

}

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π΅ вопросы

1) ΠŸΡ€ΠΈ мноТСствСнном наслСдовании ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ классов.

ΠŸΡ€ΠΈ использовании мноТСствСнного наслСдования для пороТдСния класса конструктор ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ конструкторы всСх Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов.

ΠŸΡ€ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ класса ΠΈΠ· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса Π²Ρ‹ ΡΠΎΠ·Π΄Π°Π΅Ρ‚Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ наслСдования (ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ классов).

2)

3) сСмантичСская Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ часто совокупно прСдставляСтся ΠΊΠ°ΠΊ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€ΠΎΠΌΠ±Π° отсутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ явного ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ наслСдования ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса порядок наслСдования измСняСт сСмантику класса ΠŸΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΈΠΌΠ΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ — эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ наслСдовании, Ρ‚Π°ΠΊ ΠΈ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠΌ.

ΠŸΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΠΉ ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ

4) Π’ΠΈΡ€Ρ‚ΡƒΠ°ΠΌΠ»ΡŒΠ½ΠΎΠ΅ наслСмдованиС (Π°Π½Π³Π». virtual inheritance) Π² ΡΠ·Ρ‹ΠΊΠ΅ программирования C++ - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² наслСдования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹Ρ… Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ возмоТности мноТСствСнного наслСдования (особСнно «Ρ€ΠΎΠΌΠ±ΠΎΠ²ΠΈΠ΄Π½ΠΎΠ³ΠΎ наслСдования»), ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ нСоднозначности Ρ‚ΠΎΠ³ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ· ΡΡƒΠΏΠ΅Ρ€ΠΊΠ»Π°ΡΡΠΎΠ² (нСпосрСдствСнных классов-ΠΏΡ€Π΅Π΄ΠΊΠΎΠ²) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Оно примСняСтся Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° мноТСствСнноС наслСдованиС вмСсто ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ свойств классов-ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ доступных наслСдуСмых свойств вслСдствиС нСоднозначности. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, наслСдуСмый мноТСствСнно, опрСдСляСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова virtual.

5) Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся явной характСристикой самого Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π° Π»ΠΈΡˆΡŒ описываСт Π΅Π³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡƒ. Как ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΈ, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС — это Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅. Π˜Π½Π°Ρ‡Π΅ говоря, доступ ΠΊ ΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΈ Π΅Π³ΠΎ нСстатичСским Ρ‡Π»Π΅Π½Π°ΠΌ косвСнный, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для объСдинСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ унаслСдованных ΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов Π² ΠΎΠ΄ΠΈΠ½ раздСляСмый экзСмпляр Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ ссылку Π½Π° Ρ‚ΠΈΠΏ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ, хотя послСдний являСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π° β„–6

Π’Π΅ΠΌΠ°: Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π¦Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

? исслСдованиС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°;

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΏΠΎΠ·Π΄Π½Π΅Π³ΠΎ связывания;

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ;

? ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ad-hoc;

? рСализация Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ;

? ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ абстрактных классов.

Задания

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ абстрактный Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Worker с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ начислСния Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы StateWorker, HourlyWorker ΠΈ CommissionWorker, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… данная функция ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°.

#include

using namespace std;

class worker {

public:

double i;

worker (double x) {i=x;}

virtual void func () {cout<< «zarplata standartnogo rabochego"<

cout<

};

class stateworker: public worker {

public:

stateworker (double x):worker (x){}

void func () {cout<< «zarplata stateworker"<

cout<<

class horlyworker: public worker {

public:

horlyworker (double x):worker (x){}

void func () {

cout<< «zarplata horlyworker»;

cout<<

}};

class communicationworker: public worker {

public:

communicationworker (double x):worker (x){}

void func () {cout<< «zarplata communicationworker"<

cout<<

int main () {

worker *p;

worker ob (1000);

stateworker d_ob1 (1000);

horlyworker d_ob2 (1000);

communicationworker d_ob3 (1000);

p=&ob;

p->func ();

p=&d_ob1;

p->func ();

p=&d_ob2;

p->func ();

p=&d_ob3;

p->func ();

return 0;

}

класс шаблон Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1) Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ прСдставляСт собой ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ. Если Π²Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ этот Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Π½Π° Ρ‡Π°ΡΡ‚ΠΈ, Ρ‚ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ, Π° ΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ относится ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡŽ Ρ„ΠΎΡ€ΠΌΡ‹. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹. Π­Ρ‚ΠΎΡ‚ ΡƒΡ€ΠΎΠΊ Π²Π²ΠΎΠ΄ΠΈΡ‚ понятиС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для упрощСния ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. К ΠΊΠΎΠ½Ρ†Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠΊΠ° Π²Ρ‹ ΠΎΡΠ²ΠΎΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ:

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ прСдставляСт собой ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

C++ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ созданиС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Для создания ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ваши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ (virtual) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ (virtual) функция — это функция Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стоит ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово virtual.

Π›ΡŽΠ±ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Для создания ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

2) Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ функция) — Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ (функция) класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Π² ΠΊΠ»Π°ΡΡΠ°Ρ…-наслСдниках Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ конкрСтная рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Π²Ρ‹Π·ΠΎΠ²Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ исполнСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, программисту Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ Ρ‡Π΅Ρ€Π΅Π· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: достаточно лишь Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ классу ΠΈΠ»ΠΈ наслСднику класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ объявлСн.

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (Π°Π½Π³Π». Method overriding) Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ — ΠΎΠ΄Π½Π° ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Π΅ΠΉ языка программирования, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ подклассу ΠΈΠ»ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ классу ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΡƒΠΏΠ΅Ρ€ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… классов. РСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ пСрСопрСдСляСт (замСняСт) Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² ΡΡƒΠΏΠ΅Ρ€ΠΊΠ»Π°ΡΡΠ΅, описывая ΠΌΠ΅Ρ‚ΠΎΠ΄ с Ρ‚Π΅ΠΌ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° супСркласса, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° подкласса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ»ΠΈ сигнатура, Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса

4) ΠŸΡ€ΠΈ ΠΏΠΎΠ·Π΄Π½Π΅ΠΌ связывании адрСса ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ динамичСски Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π΅ ΡΡ‚атичСски Π²ΠΎ Π²Ρ€Π΅ΠΌΡ компиляции, ΠΊΠ°ΠΊ Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языках, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… примСняСтся Ρ€Π°Π½Π½Π΅Π΅ связываниС. Π‘Π°ΠΌ процСсс связывания Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π·Π°ΠΌΠ΅Π½Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π° Π°Π΄Ρ€Π΅ΡΠ° памяти.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ