Ворисшавӣ

Печать

Дар асоси як синф синфҳои дигарро сохтан мумкин аст. Синфе, ки дар асоси он синфҳои дигар сохта шудаанд, синфи асосӣ (base class) номида мешавад. Синфе, ки он дар асоси синфи дигар сохта шудааст, синфи фаръӣ ё ворисӣ (derived class) меномем. Ҳангоми ворисшавии содда синфи фаръӣ дар асоси як синф сохта мешавад. Ҳангоми ворисшавии ҷамъӣ (multiple inheritance) синфи фаръӣ дар асоси якчанд синф сохта мешавад. Фаҳмост, ки синфи фаръӣ худ низ барои ягон синфи дигар синфи асосӣ шуда метавонад. Ҳангоми сохтани синфи фаръӣ, одатан, ба он тағйирёбандаву функсияҳои нав ҳамроҳ карда мешаванд. Яъне синфи фаръӣ аз синфи асосии худ ҳаҷман калонтар мешавад.

Дар баъзе адабиётҳо синфи асосӣ - суперсинф ё синфи модарӣ ва синфи фаръӣ - зерсинф ё синфи духтарӣ номида мешаванд.

Дар муносибати ворисшавӣ (inheritance) синф ё асосӣ аст, ё фаръӣ. Ҳангоми асоси будан, синф синфҳои дигарро бо тағйирёбандаю функсияҳои худ таъмин мекунад. Ҳангоми фаръӣ будан, синф вориси тағйирёбандаю функсияҳои синфҳои дигар мешавад. Сифатан се намуди ворисшавӣ мавҷуд аст: ворисшавии кушод (public inheritance), ворисшавии пӯшида (private inheritance), ворисшавии ҳифзшуда (protected inheritance). Ҳангоми ворисшавии кушод аъзоҳои кушод ва ҳифзшудаи синфи асосӣ мувофиқан аъзоҳои кушод ва ҳифзшудаи синфи фаръӣ мешаванд. Аъзоҳои пӯшидаи синфи асосӣ аз синфи фаръӣ дастнорасанд. Яъне, аъзоҳои кушоди синфи асосӣ ба ҳама функсияҳои барнома дастрасанд. Аъзоҳои пӯшидаи синфи асосӣ фақат ба функсия-аъзоҳои синфи асосӣ ва синфҳои дӯсти (friend class) синфи асосӣ дастрасанд. Аъзоҳои ҳифзшудаи синфи асосӣ фақат ба аъзоҳо ва дӯстҳои синфи асосӣ ва ба аъзоҳо ва дӯстҳои синфи фаръӣ дастрас буда метавонанд. Дар ин фикррониҳо калимаи "дастрас" ба чунин маъно омадааст, ки дар барнома номи намоянда, нуқта ва номи аъзои дастрасро навишта истифода кардан мумкин аст.

Тарзи ворисшавии кушод чунин аст:

class синфи_фаръи : public синфи_асоси {
операторхои иловагӣ;
}

Дар мисоли поёнӣ дар асоси синфи CSana синфи фаръии COdam сохта шудааст:

//namuna34.cpp
using namespace std;
#include <iostream>
#include <string>
class CSana {
public:
void inSana(int s=1900, int m=1, int r=1);
void inSol(int s=1900);
void inMoh(int m=1);
void inRuz(int r=1);
void outSana();
int outSol();
int outMoh();
int outRuz();
private:
int sol; // >=1900
int moh; // 1-12
int ruz; // 1-31
};
void CSana::inSana(int s, int m, int r) {
sol=(s>=1900)?s:1900;
moh=(m>=1 && m<=12)?m:1;
ruz=(r>=1 && r<=31)?r:1;
};
void CSana::inSol(int s) {sol=(s>=1900)?s:1900;}
void CSana::inMoh(int m) {moh=(m>=1 && m<=12)?m:1;}
void CSana::inRuz(int r) {ruz=(r>=1 && r<=31)?r:1;}
void CSana::outSana() {
cout<<(ruz<10?"0":"")<<ruz<<"."
<<(moh<10?"0":"")<<moh<<"."<<sol;
}
int CSana::outSol() {return sol;}
int CSana::outMoh() {return moh;}
int CSana::outRuz() {return ruz;}
class COdam : public CSana {
public:
void inNomuNasab(char *pNasab, char *pNom);
void inNasab(char *pNasab);
void inNom(char *pNom);
void outNomuNasab();
void outNasab(char *pNasab);
void outNom(char *pNom);
private:
char nasab[20];
char nom[20];
};
void COdam::inNomuNasab(char *pNasab, char *pNom) {
strcpy(nasab,pNasab);
strcpy(nom,pNom);
}
void COdam::inNasab(char *pNasab){strcpy(nasab,pNasab);}
void COdam::inNom(char *pNom){strcpy(nom,pNom);}
void COdam::outNomuNasab() {
cout<<"Nasab: "<<nasab<<endl
<<"Nom: "<<nom;
}
void COdam::outNasab(char *pNasab){strcpy(pNasab,nasab);};
void COdam::outNom(char *pNom){strcpy(pNom,nom);};
int main() {
COdam korgar;
korgar.inSana(2003,2,15);
korgar.inNomuNasab("Pulodov", "Shokir");
cout<<"Korgar"<<endl;
korgar.outNomuNasab();
cout<<endl<<"Sanai qabul:"<<endl;
korgar.outSana();
cout<<endl;
COdam *pStudent;
pStudent=new COdam;
char x[20];
int y;
cout<<"Ma'lumot dar borai studentro dokhil kuned"<<endl;
cout<<"Nasab: ";
cin>>x;
pStudent->inNasab(x);
cout<<"Nom: ";
cin>>x;
pStudent->inNom(x);
cout<<"Soli tavallud: ";
cin>>y;
pStudent->inSol(y);
cout<<"Raqami Moh: ";
cin>>y;
pStudent->inMoh(y);
cout<<"Ruz: ";
cin>>y;
pStudent->inRuz(y);
cout<<"Ma'lumot dar borai student: "<<endl;
pStudent->outNomuNasab();
cout<<endl<<"Sanai tavallud: ";
pStudent->outSana();
cout<<endl;
return 0;
}

САВОЛҲО БАРОИ МУСТАҲКАМКУНӢ
1. Тарзи муайян кардани вориси синф чӣ гуна аст?
2. Мунисибатҳои байни синфи асосӣ ва синфи фаръиро баён кунед.
3. Кадом намудҳои ворисшавиро медонед?
4. Оператори :: барои чӣ истифода бурда мешавад?

Добавить комментарий


Защитный код
Обновить

Произведение «OFTOB.COM» публикуется на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Непортированная.