1 Scopul
lucrării:
·
Studierea regulilor de determinare a moştenirii
multiple;
·
Studierea avantajelor şi neajunsurilor moştenirii
multiple;
·
Probleme legate de utilizarea moştenirii multiple;
·
Studierea rezolvării problemelor;
Sarcina lucrari:
Să se
creeze, o ierarhie de moştenire: animale - mamifere, reptile – ornitorinc.
2 Indicatii teoretice
Moştenirea multiplă, reprezintă
prin sine moştenirea de la două sau mai multe clase. Pentru a înţelege pentru
ce ne trebuie moştenirea multiplă trebuie să ne amintim, că moştenirea simplă
nu rezolvă toate problemele, aşa cum câteodată ne obligă să alegem dintre două
clase de bază potrivite.
Este interesantă părerea lui Buch
referitor la acest mecanism: „Moştenirea multiplă este ca o paraşută: de
regulă, nu ne trebuie, dar, când întâmplător o să ne trebuiască, o să ne pară
rău dacă nu o să fie la îndemână”
Ca şi orice alt instrument puternic şi frumos,
moştenirea multiplă are neajunsurile
sale, care au devenit motivul de eliminare a moştenirii multiple din multe
limbaje moderne. Problemele apar din motivul apariţiei неоднозначностей.
Presupunem, că în ambele clase de bază există câmpuri cu unul şi acelaşi nume.
class A{
public:
int x;
};
class B{
public:
int x;
};
class C: public A, public B{
};
void main(){
C c;
c.x = 10;
}
În aşa fel
clasa C conţine două variabile cu unul şi acelaşi nume, aşa cum se moştenesc
ambele, deoarece pentru fiecare clasa de bază variabila poate să aibă un sens propriu.
Compilatorul nu poate decide, cărei din variabilele moştenite sa-i atribuie
valoarea nouă. Aceiaşi situaţie are loc şi cu funcţiile.
Rezolvarea
acestei neechivalenţe constă în utilizarea precizării numelui variabilei.
Numele variabilelor pot coincide, dar numele claselor nu coincid. Aşa că,
pentru indicarea variabilei care este utilizată
trebuie de indicat clasa, de la care este moştenită variabila:
c.A::x = 10;
c.B::x = 5;
Mai dificil
este cînd clasele A şi B sunt înrudite, adică provin de la aceleaşi clase, aşa
cum este prezentat în figura 1, cu toate că poate exista un caz mai dificil. În
această configurare există două variabile identice, cu unul şi acelaşi sens. Se
pot deosebi, aşa cum este prezentat mai sus. Dar problema constă în aceia, că
ele şi după sens sunt identice, iar funcţiile definite în nivelul doi al
ierarhiei, vor lucra în propriile copiii ale variabilelor, care des duc la
greşeli semantice greu de găsit. Mai mult ca atât, în acest caz, constructorul
clasei de bază este chemat de două ori. Pentru rezolvarea acestei probleme se
utilizează ultima formă de moştenire: virtuală.
class A{
public:
int x;
A(int
x){this->x=x;}
};
class B: virtual public A{
public:
B(int x):A(x){}
};
class C: virtual public A{
public:
C(int x):A(x){}
};
class D: public B, public C{
public:
D(int
x):A(x),B(x),C(x){}
}
Aşa cum se
vede clasele B şi C trebuie ambele să moştenească clasa A.
Imediat se rezolvă problema despre existenţa a două variabile identice. Mai
mult ca atât, în acest caz este necesar de chemat constructorul clasei de bază
manual, aşa cum este arătat în exemplu. Deoarece nu întotdeauna ierarhia este
proiectată de un dezvoltator, şi unele clase deja pot fi compilate, în asemenea
cazuri rezolvarea problemei este practice imposibilă.
3
Realizarea sarcinii:
Programul dat a fost compus
din două fişiere cu numele şi „File1.cpp”(vezi anexa A) „File2.h”,(vezi
fig.1) în care se conţine funcţia
„pause()” care este folosită pentru vizualizarea programului mai comod şi
functia de afisare a unei linii, şi definirea unor culori. Conţinutul
fisierului “File2.h”:
Fig. 1
|
3.1 Explicarea clasei de baza „animale”:
class animale{
public: //declararea
variabilelor ca fiinde publice, pentru a pute accesa din alta parte a progam.
char *gen; //m -
masculin, f - femenin
char *med_trai; //mediu de trai: terestru, acvatic, subterestru etc.
char *denumire; //denumirea animaluli. Ex. lup
float masa; //masa
(kg) 2-3 norma
animale():gen(NULL),med_trai(NULL),denumire(NULL),masa(0){}; //CONSTR. IMPLICID
animale(char *denum,char *med_trai,char *gen,int m){ //
CONSTR. EXPLICIT
gen = new char; strcpy(gen,gen); //alocarea de memorie p/u un char
med_trai = new char[strlen(med_trai)+1]; //alocare p/u char: mediu de trai
strcpy(med_trai,med_trai); //copie din med_trai(parametru) in med_trai
denumire = new char[strlen(denum)+1]; //alocare p/u denumire
strcpy(denumire,denum); //copie din denum in denumire
masa=m; //”masa” i se atribui „m”
};
animale(animale &obj){ //CONSTR. DE COPIERE
gen = new char; strcpy(gen,obj.gen);
med_trai = new char[strlen(med_trai)+1];
strcpy(med_trai,obj.med_trai);
denumire = new char[strlen(denumire)+1]; strcpy(denumire,obj.denumire);
masa=obj.masa;
};
~animale(){ // DESTUCTOR
delete gen;
gen=NULL;
//sterge pointerul gen;
delete med_trai; med_trai=NULL; //sterge pointerul med_trai
delete denumire; denumire=NULL;
masa=0; //masa i se atribuie (zero)
};
//supraincarcarea functiilor „prietene” de intrare/iesire:
friend ostream & operator<<(ostream
&, animale &);
friend istream & operator>>(istream
&, animale &);
};
//*****SUPRAINCARCAREA
OPERATORULUI COUT <<**"class animal"****
ostream & operator<<(ostream
&out, animale &obj){
out<<"Denumirea:
"<<obj.denumire<<endl;
out<<"Mediu de tram:
"<<obj.med_trai<<endl;
out<<"Genu:
"<<obj.gen<<endl;
out<<"Greutatea:
"<<obj.masa<<endl;
return out;
};
istream & operator>>(istream &in, animale
&obj){
char buf[100];
cout<<"Denumire:
"; in>>buf;
obj.denumire
= new char [strlen(buf)+1];
strcpy(obj.denumire,buf);
cout<<"Mediu
de trai: "; in>>buf;
obj.med_trai
= new char [strlen(buf)+1];
strcpy(obj.med_trai,buf);
cout<<"Gen:
"; obj.gen = new char;
in>>obj.gen;
cout<<"Greutatea:
"; in>>obj.masa;
return in;
};
3.2 Explicarea clasei derivata „mamifer”:
class mamifer: public
animale{
char *col_blan; //culoarea blani
public:
mamifer(){
col_blan=NULL; }; //constructorul implicit
mamifer(char *den,char *med_trai,char *gen,int gre,char *col_blan){ //construct. explicit
animale::denumire = new char[strlen(den)+1]; //alocare
de memorie p/u denumire
strcpy(animale::denumire,den);
animale::med_trai = new char[strlen(med_trai)+1];
strcpy(animale::med_trai,med_trai);
animale::gen
= new char;
strcpy(animale::gen,gen);
animale::masa=gre;
col_blan = new char[strlen(col_blan)+1];
strcpy(col_blan,col_blan);
};
friend istream & operator>>(istream
&in, mamifer &obj);
friend ostream & operator<<(ostream
&out,mamifer &obj);
};
//*****SUPR. OPERAT
INTRARE CIN >> *******************************clasa mamifer
istream & operator>>(istream &in, mamifer
& obj){
char buf[50];
yellow; cout<<"Denumirea: ";
white; in>>buf;
obj.denumire = new char[strlen(buf)+1];
strcpy(obj.denumire,buf);
yellow; cout<<"Mediu de trai: ";
white; in>>buf;
obj.med_trai = new char[strlen(buf)+1];
strcpy(obj.med_trai,buf);
yellow; cout<<"Gen m/f: "; white; in>>buf;
obj.gen = new char;
strcpy(obj.gen,buf);
yellow; cout<<"Greutatea: ";
white; in>>obj.masa;
yellow; cout<<"Culoarea blanei:
"; white; in>>buf;
obj.col_blan = new char[strlen(buf)+1];
strcpy(obj.col_blan,buf);
return in;
};
ostream & operator<<(ostream &out,mamifer
&obj){
linie();
yellow;
out<<"Denumirea:
"; white; out<<obj.denumire<<endl;
yellow;
out<<"Mediu de trai:
"; white; out<<obj.med_trai<<endl;
yellow;
out<<"Gen m/f: ";
white; out<<obj.gen<<endl;
yellow;
out<<"Greutate kg:
"; white;
out<<obj.masa<<endl;
yellow;
out<<"Culoarea blanei: "; white;out<<obj.col_blan<<endl;
linie();
return out;
};
3.3 Explicarea clasei derivata „reptile”
class reptile: public
animale{
char *col_piel;
public:
reptile(){col_piel=NULL; };
reptile(char *den,char *med_trai,char *gen,int gre,char *col_piel){
animale::denumire = new char[strlen(den)+1];
strcpy(animale::denumire,den);
animale::med_trai = new char[strlen(med_trai)+1];
strcpy(animale::med_trai,med_trai);
animale::gen = new char;
strcpy(animale::gen,gen);
animale::masa = gre;
col_piel = new char[strlen(col_piel)+1];
strcpy(col_piel,col_piel);
};
friend istream & operator>>(istream
&in, reptile &obj);
friend ostream & operator<<(ostream
&out,reptile &obj);
};
//*********SUPRAINCARCAREA
OPERATOR DE INTRARE CIN >>
*********reptile
istream & operator>>(istream &in, reptile &obj){
char buf[50];
yellow; cout<<"Denumirea: "; white; in>>buf;
obj.denumire
= new char[strlen(buf)+1];
strcpy(obj.denumire,buf);
yellow;
cout<<"Mediu de trai: ";
white; in>>buf;
obj.med_trai
= new char[strlen(buf)+1];
strcpy(obj.med_trai,buf);
yellow;
cout<<"Gen m/f: ";
white; in>>buf;
obj.gen = new char[strlen(buf)+1];
strcpy(obj.gen,buf);
yellow; cout<<"Greutatea (kg): ";
white; in>>obj.masa;
yellow; cout<<"Culoarea pielei:";
white; in>>buf;
obj.col_piel
= new char[strlen(buf)+1];
strcpy(obj.col_piel,buf);
return in; };
//*********SUPRAINCARCAREA
OPERATOR DE IESIRE COUT <<
*********reptile
ostream & operator<<(ostream &out, reptile
&obj){
linie();
yellow; out<<"Denumire: "; white;
out<<obj.denumire<<endl;
yellow; out<<"Mediu de trai: "; white;
out<<obj.med_trai<<endl;
yellow; out<<"Gen m/f: "; white;
out<<obj.gen<<endl;
yellow; out<<"Greutatea: "; white;
out<<obj.masa<<endl;
yellow; out<<"Culoarea pielei: "; white;
out<<obj.col_piel<<endl;
linie();
return out;
};
3.4 Explicarea clasei derivata „ornit”:
class ornit: public animale{
float lat_cioc; // latimea ciocului ornitorinc
public:
ornit(){lat_cioc=0;};
ornit(char *den,char *med_trai,char *gen,int gre, int lat_coic){
animale::denumire
= new char[strlen(den)+1];
strcpy(animale::denumire,den);
animale::med_trai
= new char[strlen(med_trai)+1];
strcpy(animale::med_trai,med_trai);
animale::gen
= new char;
strcpy(animale::gen,gen);
animale::masa
= gre;
lat_cioc =
lat_cioc;
};
friend istream & operator>>(istream
&, ornit &);
friend ostream & operator<<(ostream
&, ornit &);
};
istream & operator>>(istream &in, ornit
&obj){
char buf[50];
yellow; cout<<"Denumirea: "; white; in>>buf;
obj.denumire
= new char[strlen(buf)+1];
strcpy(obj.denumire,buf);
yellow; cout<<"Mediu de trai: "; white; in>>buf;
obj.med_trai
= new char[strlen(buf)+1];
strcpy(obj.med_trai,buf);
yellow; cout<<"Gen m/f: "; white; in>>buf;
obj.gen = new char;
strcpy(obj.gen,buf);
yellow; cout<<"Greutatea (kg): "; white; in>>obj.masa;
yellow; cout<<"Latimea ciocului:";
white; in>>obj.lat_cioc;
yellow; cout<<"Culoarea blanei: ";
white; in>>buf;
obj.col_blan
= new char[strlen(buf)+1];
strcpy(obj.col_blan,buf);
return in;
};
ostream & operator<<(ostream &out,ornit
&obj){
linie();
yellow; out<<"Denumirea: "; white;
out<<obj.denumire<<endl;
yellow; out<<"Mediu de trai: "; white;
out<<obj.med_trai<<endl;
yellow; out<<"Gen m/f: ";white; out<<obj.gen<<endl;
yellow; out<<"Greutatea: ";white;
out<<obj.masa<<endl;
yellow; out<<"Latimea ciocului:";
white; out<<obj.lat_cioc<<endl;
yellow; out<<"Culoarea blanei: ";
white; out<<obj.col_blan<<endl;
linie();
return out;
};
3.5 Functia „main”
Codul sursa:
void main(){
sus:del;
yellow; cout<<"1 ";
white; cout<<"- Introdu un mamifer"<<endl;
yellow; cout<<"2 ";
white; cout<<"- Introdu o reptila"<<endl;
yellow; cout<<"3 ";
white; cout<<"- Introdu Ornitorinc"<<endl;
white; cout<<"Esc "; cyan;
cout<<"- Iesire"<<endl;
switch (getch()) {
case '1': { del;
mamifer a; cin>>a; del; cout<<a; getch(); break;};
case '2': { del;
reptile b; cin>>b; del; cout<<b; getch(); break;};
case '3': { del;
ornit c; cin>>c; del;
cout<<c; getch(); break;};
case 27 : { pause();
exit(1);};
}
goto sus;
getch();}
Meniul main (vezi Fig. 2)
Fig. 2
|
Introducerea
unui mamifer este asemanator cu introducerea unei reptile sau unui ornitoric
(vezi Fig. 3),
afisarea se efectuiaza imediat dupa ca am
terminat de introdus datele.
Fig. 3
|
Concluzi:
In urma efectuarii lucrarii date am determinat
ca mediul de prgramare C++ este cu mult
flexibil ca C, care ne permite sa manipulam cu informatia intr-un mod rapid si
eficient fara a induce erori grosolane, si am aflat ca utilizarea claselor este
cu mult mai comod si mai rapid in eleborarea unui program.
Am aflat ca moştenirea
multiplă, reprezintă prin sine moştenirea de la două sau mai multe clase, si ca
acest mecanism este foarte necesar. Dar, el nu se foloseşte în toate limbajele,
dar este realizat în C++.
Bibliografie
1 TOTUL
DESPRE C SI C++ (MANUALUL FUNDAMENTAL DE PROGRAMARE IN C SI C++)[RO][Kris
Jamsa][Lars Kland]
2 PROGRAMARE IN C_C++
CULEGERE DE PROBLEME Valiriu Iorga
3 Initiere in C++,
Programarea orientata pe obiecte (Editie Prevazuta) Cluj-Napoca 1993
Anexa A
Fişierul
„File1.cpp”
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include "File2.h"
//***********************************__CLASA
ANIMALE
class animale{
public:
char *gen; //m -
masculin, f - femenin
char *med_trai;
char *denumire;
float masa; //masa
(kg) 2-3 norma
animale():gen(NULL),med_trai(NULL),denumire(NULL),masa(0){}; //CONSTR.
IMPLICID
animale(char *denum,char *med_trai,char *gen,int m){ //
CONSTR. EXPLICIT
gen = new char;
strcpy(gen,gen);
med_trai = new char[strlen(med_trai)+1];
strcpy(med_trai,med_trai);
denumire = new char[strlen(denum)+1];
strcpy(denumire,denum);
masa=m;
};
animale(animale &obj){ //CONSTR. DE COPIERE
gen = new char;
strcpy(gen,obj.gen);
med_trai = new char[strlen(med_trai)+1];
strcpy(med_trai,obj.med_trai);
denumire = new char[strlen(denumire)+1]; strcpy(denumire,obj.denumire);
masa=obj.masa;
};
~animale(){ delete gen;gen=NULL; // DESTUCTOR
delete med_trai; med_trai=NULL;
delete denumire; denumire=NULL;
masa=0;
};
friend ostream & operator<<(ostream
&, animale &);
friend istream & operator>>(istream
&, animale &);
};
//*****SUPRAINCARCAREA OPERATORULUI COUT
<<**"class animal**
ostream & operator<<(ostream
&out, animale &obj){
out<<"Denumirea:
"<<obj.denumire<<endl;
out<<"Mediu de tram:
"<<obj.med_trai<<endl;
out<<"Genu:
"<<obj.gen<<endl;
out<<"Greutatea:
"<<obj.masa<<endl;
return out;
};
istream & operator>>(istream &in, animale
&obj){
char buf[100];
cout<<"Denumire:
"; in>>buf;
obj.denumire
= new char [strlen(buf)+1];
strcpy(obj.denumire,buf);
cout<<"Mediu
de trai: "; in>>buf;
obj.med_trai
= new char [strlen(buf)+1];
strcpy(obj.med_trai,buf);
cout<<"Gen:
"; obj.gen = new char;
in>>obj.gen;
cout<<"Greutatea:
"; in>>obj.masa;
return in;
};
//****************************__CLASA
MAMIFERE__
class mamifer: public
animale{
char *col_blan; //culoarea blani
public:
mamifer(){
col_blan=NULL; };
mamifer(char *den,char *med_trai,char *gen,int gre,char *col_blan){
animale::denumire = new char[strlen(den)+1];
strcpy(animale::denumire,den);
animale::med_trai = new char[strlen(med_trai)+1];
strcpy(animale::med_trai,med_trai);
animale::gen
= new char;
strcpy(animale::gen,gen);
animale::masa=gre;
col_blan = new char[strlen(col_blan)+1];
strcpy(col_blan,col_blan);
};
friend istream & operator>>(istream
&in, mamifer &obj);
friend ostream & operator<<(ostream
&out,mamifer &obj);
};
//*****SUPR. OPERAT INTRARE CIN >>
***************clasa mamifer
istream & operator>>(istream &in, mamifer
& obj){
char buf[50];
yellow; cout<<"Denumirea: ";
white; in>>buf;
obj.denumire = new char[strlen(buf)+1];
strcpy(obj.denumire,buf);
yellow; cout<<"Mediu de trai: ";
white; in>>buf;
obj.med_trai = new char[strlen(buf)+1];
strcpy(obj.med_trai,buf);
yellow; cout<<"Gen m/f: "; white; in>>buf;
obj.gen = new char;
strcpy(obj.gen,buf);
yellow; cout<<"Greutatea: ";
white; in>>obj.masa;
yellow; cout<<"Culoarea blanei:
"; white; in>>buf;
obj.col_blan = new char[strlen(buf)+1];
strcpy(obj.col_blan,buf);
return in;
};
ostream & operator<<(ostream &out,mamifer
&obj){
linie();
yellow;
out<<"Denumirea:
"; white; out<<obj.denumire<<endl;
yellow;
out<<"Mediu de trai:
"; white; out<<obj.med_trai<<endl;
yellow;
out<<"Gen m/f: ";
white; out<<obj.gen<<endl;
yellow;
out<<"Greutate kg:
"; white;
out<<obj.masa<<endl;
yellow;
out<<"Culoarea blanei: "; white;out<<obj.col_blan<<endl;
linie();
return out;
};
//*****************__CLASA
REPTILE__
class reptile: public
animale{
char *col_piel;
public:
reptile(){col_piel=NULL; };
reptile(char *den,char *med_trai,char *gen,int gre,char *col_piel){
animale::denumire = new char[strlen(den)+1];
strcpy(animale::denumire,den);
animale::med_trai = new char[strlen(med_trai)+1];
strcpy(animale::med_trai,med_trai);
animale::gen = new char;
strcpy(animale::gen,gen);
animale::masa = gre;
col_piel = new char[strlen(col_piel)+1];
strcpy(col_piel,col_piel);
};
friend istream & operator>>(istream
&in, reptile &obj);
friend ostream & operator<<(ostream
&out,reptile &obj);
};
//*SUPRAINCARCAREA
OPERATOR DE INTRARE CIN >>
*********reptile
istream & operator>>(istream &in, reptile &obj){
char buf[50];
yellow; cout<<"Denumirea: "; white; in>>buf;
obj.denumire
= new char[strlen(buf)+1];
strcpy(obj.denumire,buf);
yellow; cout<<"Mediu de trai: "; white; in>>buf;
obj.med_trai
= new char[strlen(buf)+1];
strcpy(obj.med_trai,buf);
yellow; cout<<"Gen m/f: "; white; in>>buf;
obj.gen = new char[strlen(buf)+1];
strcpy(obj.gen,buf);
yellow; cout<<"Greutatea (kg): ";
white; in>>obj.masa;
yellow; cout<<"Culoarea pielei:";
white; in>>buf;
obj.col_piel
= new char[strlen(buf)+1];
strcpy(obj.col_piel,buf);
return in; };
ostream & operator<<(ostream &out, reptile
&obj){
linie();
yellow; out<<"Denumire: "; white;
out<<obj.denumire<<endl;
yellow; out<<"Mediu de trai: "; white;
out<<obj.med_trai<<endl;
yellow; out<<"Gen m/f: "; white;
out<<obj.gen<<endl;
yellow; out<<"Greutatea: "; white;
out<<obj.masa<<endl;
yellow; out<<"Culoarea pielei: ";
white; out<<obj.col_piel<<endl;
linie();
return out;
};
//******************************__CLASA
ORNITORINC
class ornit: public
animale{
float lat_cioc; // latimea ciocului ornitorinc
public:
ornit(){lat_cioc=0;};
ornit(char *den,char *med_trai,char *gen,int gre, int lat_coic){
animale::denumire
= new char[strlen(den)+1];
strcpy(animale::denumire,den);
animale::med_trai
= new char[strlen(med_trai)+1];
strcpy(animale::med_trai,med_trai);
animale::gen
= new char;
strcpy(animale::gen,gen);
animale::masa
= gre;
lat_cioc =
lat_cioc;
};
friend istream & operator>>(istream
&, ornit &);
friend ostream & operator<<(ostream
&, ornit &);
};
istream & operator>>(istream &in, ornit
&obj){
char buf[50];
yellow; cout<<"Denumirea: "; white; in>>buf;
obj.denumire
= new char[strlen(buf)+1];
strcpy(obj.denumire,buf);
yellow; cout<<"Mediu de trai: "; white; in>>buf;
obj.med_trai
= new char[strlen(buf)+1];
strcpy(obj.med_trai,buf);
yellow; cout<<"Gen m/f: "; white; in>>buf;
obj.gen = new char;
strcpy(obj.gen,buf);
yellow; cout<<"Greutatea (kg): "; white; in>>obj.masa;
yellow; cout<<"Latimea ciocului:";
white; in>>obj.lat_cioc;
yellow; cout<<"Culoarea blanei: ";
white; in>>buf;
obj.col_blan
= new char[strlen(buf)+1];
strcpy(obj.col_blan,buf);
return in;
};
ostream & operator<<(ostream &out,ornit
&obj){
linie();
yellow; out<<"Denumirea: "; white;
out<<obj.denumire<<endl;
yellow; out<<"Mediu de trai: "; white;
out<<obj.med_trai<<endl;
yellow; out<<"Gen m/f: "; white; out<<obj.gen<<endl;
yellow; out<<"Greutatea: "; white;
out<<obj.masa<<endl;
yellow; out<<"Latimea ciocului:"; white;
out<<obj.lat_cioc<<endl;
yellow; out<<"Culoarea blanei: ";
white; out<<obj.col_blan<<endl;
linie();
return out;
};
//############MAIN
PRINCIPAL###############
void main(){
sus:del;
yellow; cout<<"1 "; white;
cout<<"- Introdu un mamifer"<<endl;
yellow; cout<<"2 "; white;
cout<<"- Introdu o reptila"<<endl;
yellow; cout<<"3 "; white;
cout<<"- Introdu Ornitorinc"<<endl;
white;
cout<<"Esc "; cyan; cout<<"-
Iesire"<<endl;
switch (getch()) {
case '1': { del;
mamifer a; cin>>a; del; cout<<a; getch(); break;};
case '2': { del;
reptile b; cin>>b; del; cout<<b; getch(); break;};
case '3': { del;
ornit c; cin>>c; del; cout<<c;
getch(); break;};
case 27 : {
pause(); exit(1);};
}
goto sus;
getch();}
Fişierul „File2.h”
# define white
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11) //alb
# define yellow SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
10) //galben
# define cyan
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 8) //cyan
# define del clrscr(); //curata ecranul
//**********************************MENU
PAUZA
linie(){
for (int i
= 0; i < 51; i++) cout<<"-";
cout<<endl;
};
void pause(){
yellow;
cout<<endl<<endl<<"Apasati
orice tasta...";
getch();
white;
};
Niciun comentariu:
Trimiteți un comentariu