C++ te klaslar

C++ tilindegi klass — bul maǵlıwmatlar menen funkciyaları bar (sonıń menen qatar aǵza ózgeriwshiler hám aǵza dep ataladı) klass, struktura yamasa keńes (dáslepki ekewi birlesken emes klaslar dep ataladı) gilt sózleriniń qálegeni menen járiyalanǵan paydalanıwshı anıqlaytuǵın tip yamasa maǵlıwmatlar strukturası. Funkciyaları qatnası jeke, qorǵalǵan yamasa hámmege ruqsat etilgen úsh specifikatorlar menen retlenetuǵın onıń aǵzaları. Ádepki boyınsha klass gilt sózi menen járiyalanǵan C++ klasınıń aǵzalarına kiriw jeke bolıp tabıladı. Jeke aǵzalarǵa klastan tıs kiriw múmkin emes; olarǵa tek klass aǵza funkciyaları arqalı erisiwge boladı. Hámmege ulıwma aǵzalar klastıń interfeysin quraydı hám klastan tıs ashıq.

Klass maǵlıwmatlar tipiniń úlgileri obyektler retinde belgili hám baǵdarlamashı anıqlaǵan aǵza ózgeriwshi mánislerin, turaqlılardı, aǵza funkciyaların hám shamadan tıs júklengen operatorlardı qamtıwı múmkin.

## C++ tilinde struktura menen klass arasındaǵı ayırmashılıqlar
C++ tilinde class gilt sózi menen anıqlanǵan klasta ádepki boyınsha jeke aǵzalar menen tiykarǵı klaslar boladı. Struktura — bul struct gilt sózi menen anıqlanǵan klass. Onıń aǵzaları menen klasları ádepki boyınsha hámmege ulıwma bolıp tabıladı. Is júzinde strukturalar ádette funkciyaları joq maǵlıwmatlar ushın saqlanadı. Klastan/strukturadan strukturanı alıw gezinde tiykarǵı klass/struktura ushın ádepki qatnas specifikatorı hámmege ulıwma boladı. Al klastı alıw gezinde ádepki qatnas specifikatorı jeke bolıp tabıladı.

## Jıynalǵan klaslar
Jıynalǵan klass — paydalanıwshı járiyalaǵan konstruktorları, jeke yamasa qorǵalǵan statikalıq emes maǵlıwmatlar aǵzaları, tiykarǵı klasları hám virtual funkciyaları joq klass. Bunday klastı inicializator gápleriniń qawsırma menen jabılǵan útir menen bólingen dizimi menen inicializaciyalawǵa boladı. Tómendegi kodta C hám C++ tillerinde birdey semantika bar.
```cpp
struct C {
 int a;
 double b;
};

struct D {
 int a; 
 double b;
 C c;
};

// C tipli obyektti inicializator dizimi menen inicializaciyalaw
C c = {1, 2.0};

// D-de C tipiniń ishki jıynaǵı bar. Bunday jaǵdaylarda inicializator gáplerin jaylastırıwǵa boladı
D d = {10, 20.0, {1, 2.0}};
```


### POD strukturaları
POD-strukturası (Plain Old Data Structure) — bul biriktirilmegen jıynaq (agregat) klass, onıń POD-strukturası, POD-birlespesi emes (yamasa sonday tiplerdiń massivi) túrindegi statikalıq emes maǵlıwmatlar aǵzaları yamasa siltemesi joq hám paydalanıwshı anıqlaǵan tayınlaw operatorı hám paydalanıwshı anıqlaytuǵın destruktor joq. POD strukturasın C strukturasınıń C++ alternativi dep aytıwǵa boladı. Kóp jaǵdayda POD-strukturası C tilinde járiyalaǵan sáykes struktura menen birdey yad jaylasıwına iye boladı. Sol sebepli, POD-strukturaları geyde awızeki tilde «C-stil strukturaları» dep ataydı.

#### C tilindegi strukturalar menen C++ tilindegi POD strukturalar arasında ulıwma qásiyetler

* Maǵlıwmatlar aǵzaları qatnas specifikatorı menen bólingen jaǵdaylardı qospaǵanda, keyingi aǵzalar obyekt ishinde joqarıraq adreslerge iye bolatuǵınday etip bólinedi.
* Eki POD struktura túri, eger olarda statikalıq emes maǵlıwmatlar aǵzalarınıń sanı birdey bolsa hám sáykes statikalıq emes maǵlıwmatlar aǵzaları (reti menen) jaylasıwı menen úylesimli túrleri bolsa, jaylasıw menen úylesimli boladı.
* POD strukturasında atı joq toltırıw bolıwı múmkin.
* Qayta interpretaciyalaw translyaciyasınıń járdemi menen ılayıqlı túrlendirilgen POD strukturası obyektine kórsetkish onıń dáslepki aǵzasına hám kerisinshe kórsetpe beredi, bul POD strukturasınıń basında toltırıw joq ekenin bildiredi.
* POD strukturası makrostıń ıǵısıwı menen birge paydalanıwı múmkin.

## Járiyalaw hám qollanıw
C++ te klaslardıń óz aǵzaları bar. Bul aǵzalarǵa aǵza funkciyaları, konstruktorlar hám destruktorlar retinde belgili ózgeriwshiler (basqa strukturalar menen klaslardı qosqanda), funkciyalar (arnawlı identifikatorlar yamasa shamadan tıs júklengen operatorlar) kiredi. Aǵzalar sáykesinshe public: hám private: qatnas specifikatorları arqalı hámmege ulıwma yamasa jeke ashıq bolıp járiyalanadı. Specifikatordan keyin ushırasatuǵın hár qanday aǵza basqa specifikator ushırasqansha baylanıstırılǵan qatnasqa iye boladı. Sonday-aq protected: specifikatorın paydalana alatuǵın klaslar arasında miyrasxorlıq bar.

### Global hám lokal klass
Barlıq funkciyalardan tıs anıqlanǵan klass global klass bolıp tabıladı, sebebi onıń obyektlerin baǵdarlamanıń hár qanday jerinen jaratıwǵa boladı. Eger ol funkciya denesinde anıqlansa, bul lokal klass, sebebi bunday klastıń obyektleri funkciya kólemi lokal bolıp tabıladı.

### Tiykarǵı járiyalaw hám aǵza ózgeriwshiler
Biriktirilmegen klaslar class yamasa struct gilt sózi menen járiyalanadı. Aǵzalardıń deklaraciyası usı deklaraciyada jaylastırılǵan.

Joqarıda atalǵan anıqlamalar funkcionallıq jaǵınan alternativ. Hár qanday kod Person tipindegi obyektlerdi eki maǵlıwmatlar aǵzası, «name» menen «age» retinde anıqlaydı. Jabılatuǵın qawsırmalardan keyingi noqatlı útir minnetli bolıp tabıladı.

Usı járiyalawlardıń birinen keyin (biraq ekewi de emes) Person personalı maǵlıwmatlar tipiniń jańadan anıqlanǵan ózgeriwshi mánislerin jaratıw ushın tómendegishe paydalanıw múmkin:
```cpp
#include <iostream>
#include <string>

struct Person {
 std::string name;
 int age;
};

int main() {
 Person a;
 Person b;
 a.name = "Calvin";
 b.name = "Hobbes";
 a.age = 30;
 b.age = 20;
 std::cout << a.name << ": " << a.age << std::endl;
 std::cout << b.name << ": " << b.age << std::endl;
}
```
Joqarıdaǵı kod orınlanǵanda shıǵadı
 Calvin: 30
 Hobbes: 20