Documente Academic
Documente Profesional
Documente Cultură
NOTE
DE
CURS
REV. 01
Liviu erbnescu
UNIVERSITATEA HYPERION
CUPRINS
variabile i constante
funcia main()
SIMBOLUL
FORMA
rezoluie
/
indicator
acces
::
::a
::f()
valoare
valoare
.*
->*
OB.*a
OB->*a
new
new
new tip
delete
delete
delete a
delete
a[]
this
this/
*this
this
Operaia realizat
CONSTRUCTORI I DESTRUCTORI
CONSTRUCTORI:
Constructorul se apeleaz automat la crearea fiecrui
obiect al clasei, creare de tip static, automatic sau
dinamic;
Funcia constructor are acelai nume cu al clasei (case
sensitive);
O clas poate avea mai muli constructuri, ei se deosebesc
prin numrul i tipul argumentelor;
In cazul n care nu se scrie nici un constructor se va
apela automat un constructor, fr argumente i de tip
public. Dac utilizatorul declar cel puin un constructor
atunci compilatorul nu mai genereaz acest constructor
implicit;
Exist i un constructor implicit de copiere ce
iniializeaz obiectul curent cu datele (membrii) din alt
obiect de acelai tip (aparinnd aceleiai clase) El are
forma nume_clas(nume_clasa &)i poate fi redefinit;
Constructorii nu ntorc valori;
Constructorii sunt apelai automat dup ce se se aloc
memorie (automatic sau static) pentru obiectele membru
(date membru /membrii)
DESTRUCTORI:
Destructorul este apelat automat cnd obiectul respectiv
i nceteaz existena n memorie.
Destructorul are acelai nume cu al clasei i se declar cu
operatorul ~ inainte;
Utilizatorul nu va putea apela explicit destructorul unei
clase;
Destructorul nu preia i nu ntoarce valori;
O clas are un singur destructor;
In cazul n care nu este declarat nici un destructor se va
apela unul implicit;
Destructorii sunt apelai automat naintea eliberrii
memoriei alocat automatic sau static pentru datele membru.
Explicitarea funciilor membre (inclusiv a constructorilor i
destructorilor) se poate face fie n interiorul declaraiei
clasei, fie n exteriorul clasei prin utilizarea operatorului
rezoluie " :: ".
Funciile din cadrul unei clase se pot clasifica n:
8
constructori;
destructori;
funcii normale de acces;
funcii de tip prieten (friend);
funcii virtuale;
funcii statice;
funcii de tipul operator.
Exemplu:
#include <stdio.h>
#include <iostream>
using namespace std;
class A3
{
public:
int a1;
protected: int a2;
private: int a3;
public:
A3(int a1_) { a1=a1_;a2=0;a3=0;//cout<<"\n constructor
A3(a1)<<a1:"<<a1;
}
A3(int a1_,int a2_,int a3_) {a1=a1_;a2=a2_;a3=a3_;}
void afis_a()
{cout<<"\nClass A3: a1="<<a1<<" a2="<<a2<<"
a3="<<a3;}
};
class B3:protected A3
{int b3; protected: int b2;
public: int b1;
B3(int a1_, int b1_):A3(a1_)
{b1=b1_;b2=0;b3=0;
//cout<<"\n constructor
B3(a1,b1)<<b1:"<<b1;
}
B3(int a1_,int a2_,int a3_,int b1_,int b2_,int
b3_):A3(a1_,a2_,112)
{b1=b1_;b2=b2_;b3=b3_;}
void afis_b()
{// cout<<"\nClass B3 a1="<<a3;
afis_a();
cout<<" b1="<<b1<<" b2="<<b2<<" b3="<<b3;}
};
int main(int argc, char **argv)
{
//A3 x(4);
//x.afis_a();
//B3 y(2,7);
9
//y.afis_b();
B3 z(1,2,3,4,5,6);
//z.afis_a();
z.afis_b();
getchar();
return 0;
}
Exemplu:
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
class A{
protected:
char *sir;
unsigned long dim;
public:
A(unsigned long dim1);
A(char *);
void prel();
void afis();
~A();
};
A::A(unsigned long dim1)
{
dim=dim1;
if((sir=new char[dim])==NULL)
cout<<"Memorie insuficienta";
memset(sir,0,dim*sizeof(char));
}
A::A(char* sir1)
{
strcpy(sir,sir1); dim=strlen(sir);
}
A::~A()
{
if(sir) delete[] sir;
}
void A::prel()
{
//cin>>sir;
scanf("%s",this->sir);
}
void A::afis()
{
cout<<"\n Sirul este:"<<sir;
}
10
class A1:public A
{ char *sir_ord_cresc;
public:
A1(unsigned long dim1):A(dim1)
{ sir_ord_cresc = new char[dim];
}
A1(char * sir1):A(sir1) {sir_ord_cresc = new char[dim];}
bool cauta_caracter(char x)
{ for(int i=0;i<dim;i++)
if(sir[i]==x) return true;
return
false;
}
void ordoneaza_cresc()
{bool ordonat;int i;
strcpy(sir_ord_cresc,sir);
do{
for(i=1,ordonat=true;i<dim;i++)
if(sir_ord_cresc[i-1]>sir_ord_cresc[i])
{ sir_ord_cresc[i-1]=sir_ord_cresc[i1]^sir_ord_cresc[i];
sir_ord_cresc[i]=sir_ord_cresc[i-1]^sir_ord_cresc[i];
sir_ord_cresc[i-1]=sir_ord_cresc[i1]^sir_ord_cresc[i];
ordonat=false;
}
}while(!ordonat);
}
/*void afis()
{
cout<<"\n Sirul ordonat este:"<<sir_ord_cresc;
}*/
};
int main(int argc, char **argv)
{
A1 x(40);
x.prel();
//x.afis();
x.ordoneaza_cresc();
x.afis();
//getchar();
int m; cin>>m;
return 0;
}
11
Modificator
de acces
private
protected
public
private
protected
public
private
private
private
public
public
public
Accesul
motenit de
clasa
derivat
inaccesibil
private
private
inaccesibil
protected
public
Accesul din
exterior
inaccesibil
inaccesibil
inaccesibil
inaccesibil
inaccesibil
accesibil
Exemplu
//main.h
class P_ABC
{
protected:
char *sir_c,tip;
long *sir_l;
double *sir_d;
short dim;
P_ABC(short dim1, char tip1); //'c' , 'l', 'd'
~P_ABC();
virtual void afisare()=0;
clase
};
class A : protected P_ABC
{
protected: //se pot apela in clasele derivate
char *sir;
public: //se pot apela in afara clasei si in afara ierarhiei de
clase
A(short dim1);
A(char*);
~A();
char* obtine_sir();
void afisare();
void citire();
};
};
//mostenire multipla
class AZ: public A, protected Z
{ public:
AZ(short dim1,char valinit_c);
};
//main.cpp
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <main.h>
using namespace std;
P_ABC::P_ABC(short dim1,char tip1)
{
dim=dim1; sir_c=NULL;sir_d=NULL;sir_l=NULL; tip=tip1;
if(tip=='c') sir_c=new char[dim+1]; // +1 ptr. terminatorul de
sir '/0'
if(tip=='l') sir_l=new long[dim];
if(tip=='d') sir_d=new double[dim];
//
if(sir_c==NULL &&) {cout<<"Memorie insuficienta";return;}
}
P_ABC::~P_ABC()
{ if(sir_c) delete[] sir_c;
if(sir_l) delete[] sir_l;
if(sir_d) delete[] sir_d;
}
A::A(short dim1):P_ABC(dim1,'c')
{
//preia dimensiunea sirului
//dim=dim1;
//aloca memorie ptr. sir
// sir = new char[dim+1]; // +1 ptr. terminatorul de sir '/0'
// if(sir==NULL) {cout<<"Memorie insuficienta";return;}
// echivalent cu: if(!(sir= new char[dim])) {{cout<<"Memorie
insuficienta";return;}
sir=sir_c;
}
A::A(char* sir1):P_ABC(strlen(sir1),'c')
{ //dim=strlen(sir1);
//if(!(sir= new char[dim])) {cout<<"Memorie
insuficienta";return;}
sir=sir_c;
14
//strcpy(sir,sir1);
for(int i=0;i<dim;i++)
sir[i]=sir1[i];
}
A::~A()
{ //if(sir) delete[] sir;
}
char* A::obtine_sir() {return sir;}
void A::afisare()
{cout<<"\n Sirul din clasa A este:"<<sir;}
void A::citire()
{ cin>>sir;}
B::B(short dim1):P_ABC(dim1,'l')
{sir=sir_l;}
long* B::obtine_sir() {return sir;}
void B::afisare()
{cout<<"\n Sirul din clasa B este:"<<sir[0];}
void B::citire()
{ cin>>sir[0];}
/*AB::AB(char valinit_c, long valinit_l):A(5),B(9)
{
for(int i=0;i<dim;i++)
}*/
AZ::AZ(short dim1,char valinit_c):A(dim1),Z(2,3)
{ for(int i=0;i<dim;i++) sir[i]=valinit_c;
}
s3->setare(0,45);
s3->afisare();
AZ t(5,'k');
t.afisare();
int m; cin>>m; //asteapta o tasta
return 0;
}
18
21
SUPRANCRCAREA OPERATORILOR
Suprancrcarea operatorilor (overloading-ul) presupune
redefinirea operatorilor cu ajutorul funciei de tipul
operator.
Restricii privind suprancrcarea operatorilor:
- nu pot fi suprancrcai dect operatorii existeni;
- operatorii: " . "," .* "," :: " , " ?: " i " sizeof " nu
pot fi suprancrcai;
- operatorii binari vor fi suprancrcai doar ca operatori
binari;
- operatorii unari vor fi suprancrcai doar ca operatori
unari;
- se pstreaz precedena operatorilor operator (nu exista
posibilitatea de a determina, de exemplu, ca "+" sa fie
prioritar fata de "/");
Nu este posibila definirea unui operator care sa ia ca
parametri exclusiv pointeri (exceptand operatorii: = & ,).
- Nu se poate modifica numarul operanzilor preluati de un
operator (dar se poate ignora unul din parametri).
- Un operator trebuie ori sa fie membru al unei clase, ori sa
aiba cel putin un parametru de tip clasa. De la aceasta regula
fac exceptie doar operatorii new si delete;
- pentru operatorii : " = "," [] ", " () "," -> " funcia
operator trebuie s fie membr nestatic a clasei.
a)Pentru operatorul binar "op" avem: ( op poate fi unul din
operatorii din lista cu operatori C++)
Funcia
membr a
clasei
nemembr
Sintaxa formei de
apel externe
obiect1 op obiect2
obiect1 op obiect2
Sintaxa formei de
apel externe
op obiect1
obiect1 op
op obiect1
obiect1 op
22
#include <stdio.h>
#include <iostream>
//supaincarcarea operatorilor
class VECT {
double v[3];
public:
//constructor declarat i explicitat n interiorul declaraiei
clasei
VECT()
{ v[0]=0; v[1]=0; v[2]=0;}
~VECT(){}//desctructor
//declaraie constructor cu 3 argumente
VECT(double x1,double x2,double x3);
//VECT(VECT&);//constructor de copiere
//operatorul atribuire
VECT operator=(VECT);
//ADUNAREA
C=A+B
friend VECT operator+(VECT,VECT); //C=operator+(A,B); --- C=A+B
VECT operator^(VECT); //C=B.operator^(A); --- C=B+A ( B --- this)
//ADUNAREA A+=B
VECT operator +=(VECT);
//void operator *=(VECT);
friend VECT operator ^=(VECT&,VECT&);
//friend void operator |=(VECT&,VECT&);
//X=-X
VECT operator-();
//sau
friend VECT operator!(VECT);
//double& operator[](int);
//friend bool operator==(VECT,VECT);
void afiseaza();
};
// explicitare constructor
VECT::VECT(double x,double y, double z)
{ v[0]=x;v[1]=y;v[2]=z; }
//explicitare constructor copiere
//VECT::VECT(VECT &w)
//{ v[0]=w.v[0]; v[1]=w.v[1]; v[2]=w.v[2];}
void VECT::afiseaza()
{ printf("\n Valorile: v[0]=%f,\n v[1]=%f,\n v[2]=
23
%f",v[0],v[1],v[2]);
}
//operatoru de atribuire X = Y
VECT VECT::operator=(VECT w)
{ v[0]=w.v[0];v[1]=w.v[1];v[2]=w.v[2];
return *this;
}
// X = W1 + W2 , operator + este funcie extern clasei
VECT operator+(VECT w1,VECT w2)
{ VECT elem;
elem.v[0]=w1.v[0]+w2.v[0];
elem.v[1]=w1.v[1]+w2.v[1];
elem.v[2]=w1.v[2]+ w2.v[2];
return elem;
}
// X = W1 ^ W2 , operator ^ este membr a clasei i o vom utiliza,
DE
//EXEMPLU pentru efectuarea ADUNAREA (adica de fapt X=W1+W2)
//unde W1 este obiectul curent (*this)
VECT VECT::operator^(VECT w) // w=W2
{
VECT elem;
elem.v[0]=v[0] + w.v[0];
elem.v[1]=v[1] + w.v[1];
elem.v[2]=v[2] + w.v[2];
return elem;
}
//X+=Y
VECT VECT::operator+=(VECT w)
{ v[0]=v[0] + w.v[0];
v[1]=v[1] + w.v[1];
v[2]=v[2] + w.v[2];
return *this;
}
/*
void VECT::operator*=(VECT w)
{ v[0]=v[0] + w.v[0];
v[1]=v[1] + w.v[1];
v[2]=v[2] + w.v[2];
}*/
VECT operator^=(VECT &w1, VECT& w2)
{
w1.v[0]=w1.v[0]+w2.v[0];
w1.v[1]=w1.v[1]+w2.v[1];
w1.v[2]=w1.v[2]+ w2.v[2];
24
return w1;
}
/*
void operator|=(VECT &w1, VECT& w2)
{
w1.v[0]=w1.v[0]+w2.v[0];
w1.v[1]=w1.v[1]+w2.v[1];
w1.v[2]=w1.v[2]+ w2.v[2];
}*/
// X = -X
VECT VECT:: operator-()
{ VECT elem(-v[0],-v[1],-v[2]);
return elem;
}
VECT operator!(VECT u)
{ VECT elem(-u.v[0],-u.v[1],-u.v[2]);
return elem;
}
int main(int argc, char **argv)
{
//vf. atribuire
/*
VECT x(1,2,3),y;
y=x;
y.afiseaza();
*/
//vf adunare + si atribuire
//
VECT x(1,2,3),y(10,11,12),z;
// z=x+y;
//sau
// z=operator+(x,y);
// z.afiseaza();
//vf. adunare ^ si atribuire
VECT x(100,200,300),y(10,11,12),z;
//z=x^y;
//sau
//z=x.operator ^(y);
//z.afiseaza();
//vf operator unar //
/*VECT s(3,-6,9);
s=-s;
s.afiseaza();int m; std::cin>>m; return 0; */
/*VECT s(3,-6,9);
s=!s;
s.afiseaza(); int m; std::cin>>m; return 0; */
25
//
VECT x(1,2,3),y(10,11,12);
//x^=y;
//x|=y;
x+=y;
x.afiseaza();
y.afiseaza();
int m; std::cin>>m;return 0;
}
Exemplu:
#include <stdio.h>
#include <iostream>
//supaincarcarea operatorilor
class VECT {
double v[3];
public:
//constructor declarat i explicitat n interiorul declaraiei
clasei
VECT()
{ v[0]=0; v[1]=0; v[2]=0;}
~VECT(){}//desctructor
//declaraie constructor cu 3 argumente
VECT(double x1,double x2,double x3);
//VECT(VECT&);//constructor de copiere
//operatorul atribuire
VECT operator=(VECT);
//operator indexare
double& operator[](int);
//supraincarcarea operatorului "identic"
friend bool operator==(VECT,VECT);
bool operator<(VECT);//semnificatie schimbata in identic
bool operator<=(VECT&);//semnificatie schimbata in identic
void afiseaza();
};
// explicitare constructor
VECT::VECT(double x,double y, double z)
{ v[0]=x;v[1]=y;v[2]=z; }
//explicitare constructor copiere
//VECT::VECT(VECT &w)
//{ v[0]=w.v[0]; v[1]=w.v[1]; v[2]=w.v[2];}
void VECT::afiseaza()
{ printf("\n Valorile: v[0]=%f,\n v[1]=%f,\n v[2]=
%f",v[0],v[1],v[2]);
}
26
//operatoru de atribuire X = Y
VECT VECT::operator=(VECT w)
{ v[0]=w.v[0];v[1]=w.v[1];v[2]=w.v[2];
return *this;
}
bool VECT::operator<(VECT A)
{ if(v[0]==A.v[0] && v[1]==A.v[1] && v[2]==A.v[2])
este echivalent cu v[0]
return true;
return false;
}
//this.v[0]
bool VECT::operator<=(VECT& A)
{ if(v[0]==A.v[0] && v[1]==A.v[1] && v[2]==A.v[2])
return true;
return false;
}
bool operator==(VECT A, VECT B)
{if(A.v[0]==B.v[0] && A.v[1]==B.v[1] &&
return true;
return false;
}
A.v[2]==B.v[2])
double& VECT::operator[](int i)
{
return v[i];
}
int main(int argc, char **argv)
{
VECT x(10,11,12),y(10,11,12);
//
x.afiseaza();
bool b;
// b=operator==(x,y);
// b=x==y;
// b=x.operator<(y);
// b=x<y; //semnificate de identitate (==)
b=x<=y; //semnificate de identitate (==)
if(b) printf("identice"); else printf("diferite");
/* double s;
s=x[0];
printf("x[0]:%f",s);
*/
int m; std::cin>>m;return 0;
27
}
Exemplu:
#include <stdio.h>
#include <string.h>
#include <iostream>
//supaincarcarea operatorilor
class VECT {
double v[3];
public:
//constructor declarat i explicitat n interiorul declaraiei
clasei
VECT()
{ v[0]=0; v[1]=0; v[2]=0;}
~VECT(){}//desctructor
//declaraie constructor cu 3 argumente
VECT(double x1,double x2,double x3);
//VECT(VECT&);//constructor de copiere
//operatorul atribuire
VECT operator=(VECT);
//operator indexare
char* operator[](int);
void afiseaza();
};
// explicitare constructor
VECT::VECT(double x,double y, double z)
{ v[0]=x;v[1]=y;v[2]=z; }
//explicitare constructor copiere
//VECT::VECT(VECT &w)
//{ v[0]=w.v[0]; v[1]=w.v[1]; v[2]=w.v[2];}
void VECT::afiseaza()
{ printf("\n Valorile: v[0]=%f,\n v[1]=%f,\n v[2]=
%f",v[0],v[1],v[2]);
}
//operatorul de atribuire X = Y
VECT VECT::operator=(VECT w)
{ v[0]=w.v[0];v[1]=w.v[1];v[2]=w.v[2];
return *this;
}
char* VECT::operator[](int i)
{char* den;
den=new char[10];
28
switch(i)
{ case 1: strcpy(den,"luni");break;
case 2: strcpy(den, "marti");break;
case 4: strcpy(den,"joi");break;
default: strcpy(den,"zi inc.");
}
return den;
}
int main(int argc, char **argv)
{
VECT x(10,11,12),y(10,11,12);
//
x.afiseaza();
bool b;
char *zi;
zi=x[10];
printf("Denumirea:1:%s",zi);
int m; std::cin>>m;return 0;
}
29
FLUXURI DE INTRARE/IEIRE.
OBIECTE STANDARD
30
Exemplu:
#include <stdio.h>
#include <iostream>
#include <iomanip>
using namespace std;
class A{
static int d;
int m;
double t;
public:
A(){m=11; }
void afis()
{ //umple spatiul liber pana la dimensiunea data de setw(dim) cu
caracterul specificat
cout<<setfill('*')<<"m="<<setw(6)<<setfill('*')<<m<<";"<<endl;
cout<<"d="<<setw(7)<<setfill('_')<<d<<endl;
cout<<"m[hexa]="<<hex<<m<<endl;
t=5.1234567;
cout.precision(12);
cout<<"t1="<<t<<endl;
cout.precision(4);
cout<<"t2="<<t<<endl;
cout.precision(2);
cout<<"t3="<<t<<endl;
cout<<setprecision(5)<<"t4="<<t<<endl;
}
};
int A::d=8; //se declara ca variabila globala
int main(int argc, char **argv)
{
A x;
x.afis();
//std::cout<<"TEST";
//int m; std::cin>>m; // pe post de asteapta o tasta
}
31
FLUXURI DE INTRARE/IEIRE.
OPERATII DE INTRARE/IESIRE CU FISIERE
Lucrul cu fisiere se face prin intermediul clasei ifstream
pentru citire respectiv ofstream pentru scriere. Pentru a le
utiliza, aplicatiile trebuie sa includa fstream.h. Clasele
ofstream si ifstream sunt derivate din clasa iostream, ca
urmare toti operatorii si toate functiile descrise mai sus
sunt mostenite si de aceasta clasa.
Exemplu:
#include
#include
#include
#include
<stdio.h>
<iostream>
<iomanip>
<fstream>
}
};
int main(int argc, char **argv)
{ A x;
x.scrie_in_Fisier("test24.txt");
x.citeste_din_Fisier("test24.txt");
return 0;
}
33
TRATAREA EXCEPIILOR
n timpul executrii unui program pot aprea situaii n care
sunt generate erori datorate de multe ori depirii puterii de
reprezentare a numerelor, de operaii nepermise, de contori n
afara limitelor admise, etc. Ca urmare este necesar
anticiparea unor posibile excepii, de multe ori provenite de
la preluarea incorect a datelor.
C + + ofer trei cuvinte cheie pentru a gestiona o excepie:
try , catch i throw.
Cuvntul cheie try este urmat de blocul ce se execut i care
poate genera o eroare n execuie
try { bloc ce se execut n mod normal}
Acest cuvnt cheie permite aplicaiei s anticipeze un
comportament anormal i va ncerca s se ocupe de ea.
catch { bloc ce se execut n cazul n care apare o
excepie/eroare }
Acest cuvnt cheie este urmat, ntre acolade, de blocul ce se
execut n cazul unei excepii/erori
throw transmite excepia, n vederea tratrii acesteia, ctre
sistemul de operare.
Ex:
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cout << "a= ";
cin >> a;
cout << "b= "; cin >> b;
try {
if( b==0 )
throw;
c = a / b;
}
34
catch()
{ cout<<b este zero;
}
cout << "\n";
return 0;
}
cin >> a;
try {
cout << "b= "; cin >> b;
if(b == 0)
throw "b este ZERO !";
c = a / b;
}
catch(const char* Message)
{
cout << "Error: " << Message;
}
cout << "\n";
return 0;
}
n cazul n care sunt tratate mai multe excepii putem avea:
try {
//
codul ce poate contine exceptii/erori
}
catch(Arg1)
{
//tratarea primei excetii
}
catch(Arg2)
35
{
//tratarea urmatoarei exceptii
}
Deosebirea ntre argumente se va face prin tipurile acestora
Ex:
#include <iostream.h>
int main()
{
int a,b,c;
cout << "a= ";
cin >> a;
try {
cout << "b= "; cin >> b;
if(b == 0) throw "b este ZERO !";
if(b == 1) throw 1;
if(b == 2) throw '2';
c=a/b+a/(b-1)+a/(b-2);
catch(const char* Message)
{
cout << "Error: b=0;
}
catch(const int Message)
{
cout << "Error:b=1;
}
catch(const char Message)
{
cout << "Error: b=2";
}
cout << "\n";
return 0;
}
36
crearea
de interfae grafice
Interface)
n C++.
open source
i crosssub toate
#include <wx/file.h>
int main(int argc, char **argv)
{
37
vederea
realizrii
interfeelor
grafice
este
necesar
38
protected:
wxStaticLine* m_staticLine;
wxStdDialogButtonSizer* m_sdbSizer;
wxButton* m_sdbSizerOK;
wxButton* m_sdbSizerCancel;
virtual void OnCloseDialog( wxCloseEvent& event )
{ event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event )
{ event.Skip(); }
virtual void OnOKClick( wxCommandEvent& event )
{ event.Skip(); }
public:
MainDialogBase( wxWindow* parent, wxWindowID id =
wxID_ANY, const wxString& title = _("wxMiniApp"), const wxPoint&
pos = wxDefaultPosition, const wxSize& size = wxSize( 400,300 ),
long style = wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE );
~MainDialogBase();
};
#endif //__gui__
40
main.h
#ifndef __main__
#define __main__
// main wxWidgets header file
#include <wx/wx.h>
// gui classes generated by wxFormBuilder
#include "gui.h"
class MainApp : public wxApp
{
public:
virtual bool OnInit();
};
DECLARE_APP(MainApp)
class MainDialog : public MainDialogBase
{
public:
MainDialog( wxWindow *parent );
virtual ~MainDialog();
protected:
virtual void OnCloseDialog( wxCloseEvent& event );
virtual void OnOKClick( wxCommandEvent& event );
virtual void OnCancelClick( wxCommandEvent& event );
};
#endif //__main__
main.cpp
#include "main.h"
IMPLEMENT_APP(MainApp);
bool MainApp::OnInit()
{
SetTopWindow( new MainDialog( NULL ) );
GetTopWindow()->Show();
return true;
}
MainDialog::MainDialog(wxWindow *parent) : MainDialogBase( parent )
{
}
MainDialog::~MainDialog()
{
}
41
42