Professional Documents
Culture Documents
Mt chng trnh my tnh c th xem nh mt tc phm, bi v n c c bi bn (c th by gi, m cng c th l 10 nm sau!), v bi nhng lp trnh vin khc sau bn ( pht trin, sa cha, cp nht ...). Chnh v l , mt chng trnh my tnh nn p ng c 3 yu cu sau: ng, d c v d hiu. Mc ch ca style l lm cho chng trnh tr nn d c i vi ngi vit v nhng ngi khc, mt style tt l mt phn thit yu ca vic lp trnh tt. Vit mt chng trnh chy ng l cha bi chng trnh khng ch cho my tnh c m cn cc lp trnh vin khc c. Hn na, mt chng trnh c style tt lun c nhiu kh nng chy ng hn mt chng trnh c style ti.
Ti liu ny cung cp cho bn: 1. Mt tp hp cc chun trnh by chng trnh thng dng. 2. Mt thi quen t bn c mt phong cch lp trnh tng i chuyn nghip. Tuy nhin, ti liu ny khng c tham vng cp n ton b cc kha cnh ca mt phong cch lp trnh. N ch ni n nhng g cn thit cho bn, mt sinh vin, khi cha tm c mt phong cch ph hp to c nhng thi quen tt ngay t u.
T chc chng trnh 1. Mun ha chng trnh ca bn Chng trnh ca bn nn c tch thnh nhiu mun, mi mun thc hin mt cng vic v cng c lp vi nhau cng tt. iu ny s gip bn d bo dng chng trnh hn v khi c chng trnh, bn khng phi c nhiu, nh nhiu cc on lnh nm ri rc hiu c iu g ang c thc hin. Khi mun chuyn thng tin cho cc chng trnh con, bn nn s dng cc tham s. Trnh s dng cc bin ton cc v lm nh vy bn s trit tiu tnh c lp gia cc chng trnh con v rt kh khn khi kim sot gi tr ca chng khi chng trnh thi hnh. (Ch , bn nn phn bit gia bin ton cc v hng s ton cc) 2. nh ngha v ci t ca cc lp phi c chia thnh nhiu file ta c th d dng ti s dng. nh ngha cc lp c lu trong cc file header vi m rng *.h. Ci t ca cc thnh vin ca lp lu trong file ngun vi m rng *.cpp. Thng thng mi lp c mt cp file *.H v *.CPP, nhng c th gp cc lp c lin quan vo mt cp file.Cui mi file *.H l ch th #include n file *.CPP.Cui mi file *.CPP l cc "chng trnh chnh" dng test file CPP km theo cc #define thch hp cho vic test. Chng trnh chnh c lu trong mt file ngun ring v include cc file header ca cc lp c dng n.
3. Mi file header ca lp nn s dng cc nh hng #ifndef, #define, v #endif m bo mi file header ch c include 1 ln. K hiu c #define nn l tn ca file header vit ton bng ch hoa vi mt du gch di ( _ ) thay cho du chm. V d: //counter.h #ifndef COUNTER_H #define COUNTER_H class Counter {
Chun ti liu
1. S dng // cho cc ch thch. Ch dng /* */ tm thi v hiu ha cc on chng trnh test v debug. 2. Mi file ngun, c .CPP v .H, u phi bt u bng mt khi ch thch ngi c c th kt ni cc file nu chng b tch ra. Mu nh sau: //--------------------------------------------------------------------// Name: H tn // Class: Lp // Project: m t/tn d n (mt dng, ging nhau ti mi file) // Purpose: Mc ch s dng ca m chng trnh hoc cc khai bo trong file ny //--------------------------------------------------------------------Mi lp, hm, phng thc phi c mt khi ch thch m t ngn gn lp, hm, phng thc lm g; i vi hm/phng thc: lit k tt c cc tham s, nu r ngha ca tham s; v m t iu kin trc v sau ca hm/phng thc .Chn cc tn c ngha s n gin ha cc ch thch. Lu , ti liu v phng thc t ti nh ngha lp (*.H) ta c th sao chp ti liu vo file *.CPP nhng khng bt buc.
3. C th ch thch cc on code bn trong hm, tuy nhin ch nn ch thch hiu. Qu nhiu ch thch v ch thch tha lm code trng ri. Tt c cc ch thch phi c li u dng cng on code quanh n.
Tn:
S dng cc tn c ngha.Tn giu tnh m t cho cc bin ton cc v tn ngn gn cho cc bin cc b.Tn
c ngha s gip chng trnh d vit v d debug hn. Nu bn phi dng tn khng c ngha cho mt ci g th c th bn cha hon ton hiu bi ton mnh ang gii. Hy c hiu r trc khi tip tc lp trnh. Theo thngl, cc tn i v j c dnh cho cc ch s, p v q dnh cho cc con tr, s v t dnh cho cc xu.Ngi ta dng cc tn bt u hoc kt thc bi ch p cho cc bin con tr (chng hn nodep, intp, intpp, doublep), cc tn bt u bng ch hoa cho bin ton cc (chng hn Globals) v tt c ch ci hoa cho cc hng s (chng hn CONSTANTS). Khuyn co s dng tn ting Anh kiu camel (xem bn di) Cc namespace trong C++ gp phn lm r ngha ca cc tn m khng cn s dng cc tn di.
Th nht, cng mt ni dung l queue nhng c biu din bi ba du hiu: Q, Queue v queue. Th hai, cc bin v cc hm thnh phn ca lp UserQueue ch c th c s dng bi cc i tng ca lp ny, do vy vit queue.queueCapacity hay queue.noOfUsersInQueue() r rng l tha. Chng ta c th vit li lp ny vi cc tn mi nh sau: class UserQueue { int nitems, front, capacity; public int nusers() {...} } Khng ch bn thn on m nh ngha lp d hiu hn, m nhng on m s dng lp UserQueue cng d hiu hn: queue.capacity++; n = queue.nusers(); Lp UserQueue vn c th ci tin thm, bi nitems v nusers thc cht l cng biu din mt khi nim v do ch cn s dng mt trong hai tn m thi.
Tn ca cc project, form, v component sinh bi mi trng lp trnh: cc project v form phi c tn hp l, khng
nguyn l Form1. Cc component phi c t tn c ngha, ngoi tr cc component nh Label, Group Box, etc., nu chng khng c mt trong code. Cc component nn c t hu t l kiu i tng: Ex: widthScale, nameText, leftScrollbar, mainForm, myLabel, printerDialog ...
Tn bin v tn hm:
o Thng phi l cc t hoc cm t. Ngoi l duy nht: con m vng for() i khi c th ch cn dng tn l 1 ch ci chng hn i o khng vit tt tr cc t vit tt thng dng chng hn HTML, khi coi t vit tt nh t thng thng (tn s c dng convertToHtml thay v convertToHTML) o t tn cho cc namespace nn bng ch in thng ton b: Ex: mynamespace, com.company.application.ui o Tn bin l mt danh t bt u bng mt k t in thng, cc t tip theo c bt u bng mt k t in hoa: Ex: line, audioSystem o t cc tn ng cho hm: Tn hm nn l mt ng t theo sau bi mt danh t. V d: now = date.getTime(); Cc hm tr v gi tr boolean nn c t tn th hin gi tr m n tr v. V d: isOctal( c ) th tt hn l: checkOctal( c ); v cch t tn th nht cho bit ngay rng hm tr v gi tr true nu c l mt s octal v tr v false trong trng hp ngc li. o Tn hm th hin chc nng Cc tin t thng c s dng: get/set, add/remove, create/destroy, start/stop, insert/delete, increment/decrement, old/new, begin/end, first/last, up/down, min/max, next/previous, old/new, open/close, show/hide, suspend/resume ... Ex: +set/get c t trong cc phng thc truy cp trc tip n thuc tnh: getName(), setSalary(int) +find c th c s dng trong cc phng thc tm kim: vertex.findNearestVertex(); matrix.findSmallestElement(); node.findShortestPath(Node destinationNode); +Tp hp nhiu i tng nn c t tn c t tn s nhiu: vector<Point> points; int[] values; +Nhng bin ch s lng i tng nn c tin t n: nPoints, nLines
Tn class (v struct):
Dng ch hoa tt c cc ch ci u mi t, cn li l cc ch ci thng. V d: GameBoard, Game.
nh dng
o Phi thng nht, lun dng 3 hoc lun dng 4 k t o Ch khng c dng ln ln gia k t tab v space li u dng, (cc mi trng son tho c th quy c khc nhau v di ca tab).
*i = 0; return n;
// no space between 'strcmp' and '(', // but space between 'if' and '(' if ( strcmp( input_value, "done" ) == 0 ) return 0; Ngoi ra nn c khong gia du ngoc ca hm v i s nh trn. Nn c 1 space trc v sau mi ton t i s hc hoc lgic, chng hn +, <<, v ||. Nn dng 1 space sau du phy, nhng trc du phy hoc chm phy khng nn c du cch.Ngoi l: khng chn khong trng vo gia ton hng v ton t ++ v -
Thit k
Khng d liu ca lp dng public. Hn ch ti a vic dng bin ton cc. Nguyn tc quyn u tin ti thiu: ch cho hm quyn truy nhp thc hin nhim v ca mnh, khng cho
nhiu quyn hn. const c s dng cho mt bin khi hm khng cn thay i bin c tham chiu n . Nu hm khng c sa gi tr ca mt tham s, ch truyn tham s vo l gi tr i vi cc kiu n gin, mng phi c truyn di dng "const []", v cc kiu struct/class nn truyn dng "const &" hoc "const *".
CODE 1.Vit code theo chun ISO d compiler c bt buc hay khng.
Hn ch #include ngoi chun, VD: conio.h Nn int main()v return 0;thay v void main() Khai bo using std:: ngay c khi IDE khng bt buc. (dng using namespace std; khng tt lm)
2. Cc hng s khng nn vit trc tip vo chng trnh. Thay v th, ngi ta thng s dng lnh #define hay const t cho nhng hng s ny nhng tn c ngha. iu ny s gip lp trnh vin d kim sot nhng chng trnh ln v gi tr ca hng s khi cn thay i th ch phi thay i mt ln duy nht gi tr nh ngha ( #define hay const). V d: popChange = (0.1758 - 0.1257) * population; nn c vit l: const double BIRTH_RATE = 0.1758, DEATH_RATE = 0.1257; hoc: #define BIRTH_RATE 0.1758 #define DEATH_RATE 0.1257
//... popChange = (BIRTHRATE - DEATH_RATE) * population; Ghi ch: bn khng nn dng #define thng xuyn nh ngha cc hng s, bi v trong qu trnh debug, bn s khng th xem c gi tr ca mt hng s nh ngha bng #define. Khi lm vic vi cc k t, hy s dng cc hng k t thay v cc s nguyn. V d kim tra xem c c phi mt ch ci hoa hay khng, c th dng on m sau: if( c >= 65 && c <= 90 ) ... Nhng on m ny hon ton ph thuc vo b m biu din k t ang c s dng. Cch tt hn l vit nh sau: if( c >= A && c <= Z ) ...
3.Lun vit new v delete thnh tng cp. 4. Khi khai bo con tr, du con tr nn c t lin vi tn, nhm trnh trng hp sau:
char *p, *q, *r; (lut ny cng c dng khi khai bo tham chiu vi du &)
5. Nn s dng cc du ( ) khi mun trnh cc li v u tin ton t. V d: // No! int i = a >= b && c < d && e <= g + h; // Better int j = (a >= b) && (c < d) && (e <= (g + h)); Bng sau trong sch C Programming Language ch ra th t u tin cc ton t trong C. Hng trn cng c mc u tin cao nht. Ton t ([-. ! -- ++ { * & (type-cast) sizeof + - (1 ngi) * /% + << >> < <= > >= == != & ^ | && || ?: = += -= *= /= %= &= ^= |= <<= >>= , Dch T tri qua phi T phi qua tri T tri qua phi T tri qua phi T tri qua phi T tri qua phi T tri qua phi T tri qua phi T tri qua phi T tri qua phi T tri qua phi T tri qua phi T tri qua phi T phi qua tri T tri qua phi
Dng bng ny, c th thy rng char *a[10]; l mt mng 10 con tr k t. Bn cng thy rng ti sao li cn du ngoc khi dng (*p).i. Sau khi thc hnh, bn s nh bng ny.
6.Tch cc biu thc phc tp thnh cc biu thc n gin hn Biu thc sau y rt ngn gn nhng li cha qu nhiu php ton: *x += ( *xp = ( 2*k < ( n m ) ? c[ k + 1 ] : d[ k ] ) );
Chng ta nn vit li nh sau: if( 2*k < n m ) *xp = c[ k + 1 ]; else *xp = d[ k ]; *x += *xp;
Cc lp trnh vin thng thch vit cc lnh cng ngn gn cng tt. Tuy nhin iu ny thng gy phin toi cho ngi khc. Hy xem biu thc sau y lm g: subkey = subkey >> ( bitoff ( ( bitoff >> 3 ) << 3 ) );
Biu thc trong cng ( bitoff >> 3 ) dch phi bitoff 3 bit. Kt qu thu c li c dch tri 3 bit. Bi vy 3 bit cui cng ca bitoff c thay th bi cc s 0. Kt qu ny li c tr i bi gi tr ban u ca bitoff, kt qu ca php tr chnh l 3 bit cui cng trong gi tr ban u ca bitoff. Ba bit ny c dng dch subkey sang phi. Bi vy, biu thc ni trn tng ng vi biu thc sau y: subkeu = subkey >> ( bitoff & 07 );
R rng cch vit th hai d hiu hn nhiu. Mt v d khc v cch vit biu thc ngn gn nhng lm phc tp ha vn : child = ( ! LC && ! RC ) ? 0 : ( ! LC ? RC : LC );
Cch vit di y di hn, nhng d hiu hn nhiu: if( LC == 0 && RC == 0 ) child = 0; else if( LC == 0 ) child = RC; else child = LC;
10 | P h o n g c c h l p t r n h C + +
Ton t ? : ch thch hp cho nhng biu thc ngn kiu nh sau y: max = ( a > b ) ? a : b; hoc: printf( The list has %d item%s\n, n, n == 1 ? : s );
Hy nh rng mc tiu ca chng ta l vit nhng on m d hiu, ch khng phi cc on m ngn gn. 8.Cn thn vi du = = v == l 2 ton t gy nhn ln nht trn C, nhng bn c th trnh gp n bng thi quen vit r-value (biu thc bn phi php gn) sang bn tri php so snh: if ( a == 42 ) { ... }// Cch vit thng thng. if ( 42 == a ) { ... }// Nn vit th ny. V y l s khc bit, khi bn nhm ... if ( a = 42 ) { ... }// Chy bnh thng, kh tm ra li if ( 42 = a ) { ... }// Bo li ngay ch ny
9. Cc idiom Cng ging nh ngn ng t nhin, ngn ng lp trnh cng c cc idiom (thnh ng !?), l cc cch vit code chnh tc cho cc trng hp thng dng, tm hiu idiom l cc chun khng bt buc nhng c a s ngi dng tun theo. S dng cc idiom gip gim bt kh nng mc li ng thi lm chng trnh d c hn v nht l c v chuyn nghip hn Sau y l mt s idiom ph bin: 1.Cc idiom cho mng duyt qua n phn t ca mt mng v khi to chng, c cc cch vit sau y: i = 0; while ( i <= n 1 ) array[ i++ ] = 1.0; hoc for( i = 0; i < n; ) array[ i++ ] = 1.0; hoc for( i = n; -i >= 0; ) array[ i ] = 1.0; Tt c nhng cch vit trn u ng, tuy nhin idiom cho trng hp ny l: for( i = 0; i < n; ++i ) array[ i ] = 1.0;
11 | P h o n g c c h l p t r n h C + +
Mt lu nh l s khc bit gia i++ v ++i: i++ ly gi tr ca i trc ri tng n ln. ++i tng gi tr ca i ri ly gi tr mi. Do i vi cc con m vng lp (for(),while()) nn dng ++i tng tc . Idiom ca vng lp duyt qua cc phn t ca mt danh sch (list) l for( p = list; p != NULL; p = p->next ) ... i vi container: vector<string>::iterator it; for(it = v.begin(); it != v.end(); ++it) std::cout << *it; i vi cc vng lp v hn, idiom l: for ( ; ; ) hoc while( 1 ) Khi to danh sch: struct info { char *name; char *job; char *address; }; info *array[] = { { "name1", "job1", "add1" }, { "name1", "job1", "add1" }, { "name1", "job1", "add1" }, //... }; Hm tm kim tuyn tnh: template <class T> int find (T obj,T* array,int size,int from = 0) { for(int i = from; i<size; ++i) if(array[i] == T) return i; return size; } Sao chp mng: Gi s 2 mng double *a,*b; thay v: for(int i=0; i<n; ++i) b[i]=a[i]; ta c th dng: //#include<string.h>
12 | P h o n g c c h l p t r n h C + +
memcpy(b,a,n*sizeof(double)); Cp pht ng cho mng 2 chiu: int **pp = new type*[n]; int *p = new type[n*m]; for (int i = 0; i < n; ++i) pp[i] = p + i * m; //... //use array here delete[] p; delete[] pp;
2.Idiom cho lnh if Tip theo l mt idiom dnh cho cu lnh if. Hy xem on m long ngong sau y lm g
if ( argc==3 ) if ( ( fin = fopen(argv[l] , r ) ) != NULL ) if ( ( fout = fopen( argv[2], w ) ) != NULL ) { while ( ( c = getc( fin ) ) != EOF ) putc( c, fout ); fclose( fin ); fclose( fout ); } else printf ( Cant open output file %s\n, argv[2] ) ; else printf( Cant open input file %s\n, argv[l] ) ; else printf ( Usage: cp input file outputfile\n ) ; Vit li on m ny theo ng idiom nh sau:
if ( argc != 3 ) printf ( Usage: cp input file outputfile\n ) ; else if ( ( fin = fopen( argv[l] , r ) ) == NULL ) printf( Cant open input file %s\n, argv[l] ); else if ( ( fout = fopen( argv[2], w ) ) == NULL ) { printf ( Cant open output file %s\n, argv[2] ) ; fclose( fin ) ; } else
13 | P h o n g c c h l p t r n h C + +
{ while ( ( c = getc( fin ) ) != EOF) putc( c, fout ); fclose( fin ) ; fclose( fout ) ; }
Nguyn tc khi vit cc lnh if() l t cc php ton kim tra iu kin cng gn cc hnh ng tng ng cng tt.
3.Idiom cho switch() case: Xt v d: switch (c) { case '-': sign = -1; case '+': c = getchar(); case '.': break; case '0': case 'o': default: if (!isdigit(c)) return 0; } cch vit sau tuy di nhng d c hn:
switch (c) { case '-': sign = -1; case '+': c = getchar(); break; case '.': break; default: case '0': case 'o': if (!isdigit(c)) return 0; break; }
4.S 0 trong chng trnh S 0 thng xuyn xut hin trong cc chng trnh vi nhiu ngha khc nhau. Trnh dch s t ng chuyn s 0 thnh kiu thch hp. Tuy nhin nn vit ra mt cch tng minh bn cht ca s 0 m chng ta ang ni n. C th, hy s dng ( void* )0 hoc NULL biu din con tr null trong C, s dng \0 cho k t null cui mi xu v s dng 0.0 cho cc s float hoc double c gi tr khng. ng vit on m nh sau p = 0; name[ i ] = 0;
14 | P h o n g c c h l p t r n h C + +
x = 0; Hy vit: p = NULL; name[ i ] = '\ 0'; x = 0.0; S 0 nn dnh cho cc s nguyn c gi tr bng khng. Tuy nhin trong C++, 0 (thay v NULL) li c s dng rng ri cho cc con tr null, iu ny khng c khuyn khch.