Ворисшави

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

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

Дар муносибати ворисшави (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. Оператори :: барои чи истифода бурда мешавад?

Дополнительная информация