Nusqalaw konstruktorı - Dástúriy injiniring tálim baǵdarı 1-kurs 3-gruppa studenti Boranbaeva Umidanıń

|
Dástúriy injiniring tálim baǵdarı 1-kurs 3-gruppa studenti Boranbaeva Umidanıń
|
bet | 7/10 | Sana | 20.05.2024 | Hajmi | 0,68 Mb. | | #245612 |
Bog'liq Kurs jumısı-Boranbaeva UmidaNusqalaw konstruktorı
Nusqalaw konstruktorı klass obyektin jaratıwda sol klastıń bar bolǵan obyektlerinen ózgeriwshilerdi (olardiń mánisin) nusqasın aladı. Sol sebepli ol klass obyektine konstanta obyekt (const S&) yaki apiwayı adres alıw ámeli (S&) bolǵan jalǵiz parametrge iye boladı . Parametrlerdiń birinshisin isletiw maqul esaplanadı , ol konstanta obyektlerin nusqalaw imkanıń beredi.
Tómendegi mısalda nusqalaw konstruktorın isletiw kórsetilgen:
#include
using namespace std;
class Noqat
{
int x,y;
public:
Noqat( const Noqat & koor);
Noqat( int x0 , int y0 );
void Abtsissa();
void Ordinata();
void Ozgertiw(int delta_x , int delta_y );
};
Noqat::Noqat( const Noqat & koor ) { x = koor.x ; y = koor.y ; };
Noqat::Noqat( int x0 , int y0 ) { x = x0 ; y = y0 ; };
void Noqat::Abtsissa() { cout<<"x="< void Noqat::Ordinata() { cout<<"y="< void Noqat::Ozgertiw(int delta_x , int delta_y ) { x+= delta_x ; y+= delta_y ; };
int main()
{
Noqat koord1(5,10);
Noqat koord2=koord1;
Noqat koord3(koord1);
koord1.Ozgertiw(3,-2);
koord2.Ozgertiw(1,2);
cout<<"\n koord1 обйект өзгериўши ағзалар мәниси:";
koord1.Abtsissa();
koord1.Ordinata();
cout<<"\n koord2 обйект өзгериўши ағзалар мәниси:";
koord2.Abtsissa();
koord2.Ordinata();
cout<<"\n koord3 обйект өзгериўши ағзалар мәниси:";
koord3.Abtsissa();
koord3.Ordinata();
return 0;
}
programma islew natiyjesinde ekranǵa tómendegiler shıǵadı:
koord1 obyekt ózgeriwshi aǵzalar mánisi: x = 8 y = 8
koord1 obyekt ózgeriwshi aǵzalar mánisi: x = 6 y = 12
koord1 obyekt ózgeriwshi aǵzalar mánisi: x = 5 y =10
4-§. Dos funkciyalar hám klass dosları
C++ tili OBP tiykarǵı konsepciyalarınan biri – ózgeriwshilerin Inkapsulyaciyalaw konsepciyasın “doslar” járdeminde “buzıw” múmkin. C++ tilinde klasstıń eki túrdegi klass dosların daǵaza etiw imkanın beredi: dos funkciya hám dos klass.
Bizge belgili, klasstıń jabıq elementlerine funkciya-aǵzalar arqalı múrajáát etiw múmkin. Biraq C++ tili klasstıń elementlerine basqa jol arqalı - dos funkciyalar arqalı múrajáát qılıwdı qollap-quwatlaydı. Dos funkciyalar klass aǵzaları bolmaǵan jaǵdayda usı klasstıń jabıq aǵzalarına múrajáát etiw imkaniyatına iye.
Bazı bir klassqa dos klasstı daǵaza qılıw ushın usı klass quramında aldına friend gilt sózi qoyılǵan funkciya prototipi jazıladı.
Mısal ushın:
#include
class Dos_klass
{
int x,y;
public:
Dos_klass(int n, int m)
{x=n; y=m;}
friend bool Eseli(Dos_klass ob); // Dos funkciya prototipi
};
bool Eseli(Dos_klass ob)
{
return (!(ob.x%ob.y));
}
main()
{
Dos_klass obiekt(12,3);
if(Eseli(obiekt))
cout<<"Sanlar eseli.\n";
else
cout<<"Sanlar o'z -ara eseli emes.\n";
return 0;
}
Sonı aytıp ótiw kerek, dos funkciya ózi daǵaza qılınǵan klasstıń aǵzası esaplanbaydı. Usı sebepli, dos funkciya shaqırılıwında obyekt atın kórsetiw yaki klass aǵzalarına múrajáát ámelleri (“.” yaki “->”) isletilmeydi. Dos funkciyalar klasstıń jabıq aǵzalarına tek klass obyekti arqalı múrajáát etedi. Bul obyekt óz náwbetinde dos funkciyada daǵaza qılınǵan bolıwı yaki oǵan argument sıpatında beriliwi múmkin. Dos funkciya (klass) miyraslıq penen ótpeydi, yaǵnıy olar tuwındı klasslarda ámel qılınbaydı. Basqa tárepten, funkciya bir waqıttıń ózinde bir neshe klassqa dos bolıwı múmkin.
Mısalı:
#include
using namespace std;
class Klass1;
class Klass2
{
int d;
public:
Klass2(int _d){ d=_d;}
friend bool Eseli_sanlar(Klass1 ob1, Klass2 ob2);
};
class Klass1
{
int n;
public:
Klass1(int _n){n=_n; }
friend bool Eseli_sanlar (Klass1 ob1, Klass2 ob2);
};
bool Eseli_sanlar (Klass1 ob1, Klass2 ob2)
{
return(!(ob1.n%ob2.d));
}
int main()
{
Klass1 obiekt1(15);
Klass2 obiekt2(3);
cout<<"Sanlar eseli";
if(!Eseli_sanlar (obiekt1, obiekt2)) cout<<"emes";
cout<<'!';
return 0;
}
Bul mısalda klasstıń tolıq emes daǵazasınan paydalanıw kórsetilgen. Bul qurılmanı paydalanbay ele daǵazası berilmegen klass atın paydalanıp bolmaydı.
Funkciya bir klasstıń aǵzası bolǵan halda basqa klasstıń dostı bolıwı múmkin.
Mısalı:
#include
using namespace std;
class Klass1; //Klasstin toliq emes dag'azasi
class Klass2
{
int d;
public:
Klass2(int _d){ d=_d;}
bool Eseli_Sanlar(Klass1 ob1);
};
class Klass1
{
int n;
public:
Klass1(int _n){n=_n; }
friend bool Klass2::Eseli_Sanlar(Klass1 ob1);//Dos funktsiy protatipi
};
bool Klass2::Eseli_Sanlar(Klass1 ob1)
{
return(!(ob1.n%d));
}
int main()
{
Klass1 obiekt1(15);
Klass2 obiekt2(3);
if(obiekt2.Eseli_Sanlar(obiekt1)) cout<<"sanlar eseli";
else cout<<"Sanlar eseli emes!";
return 0;
}
|
| |