Professional Documents
Culture Documents
T ch c chng trnh 1. Mun ha chng trnh c a b n Chng trnh c a b n nn c tch thnh nhi u mun, m i mun th c hi n m t cng vi c v cng c l p v i nhau cng t t. i u ny s gip b n d b o d ng chng trnh hn v khi c chng trnh, b n khng ph i c nhi u, nh nhi u cc o n l nh n m r i rc hi u c i u g ang c th c hi n. Khi mu n chuy n thng tin cho cc chng trnh con, b n nn s d ng cc tham s . Trnh s d ng cc bi n ton c c chuy n thng tin gi a cc chng trnh con. lm nh v y b n s tri t tiu tnh c l p gi a cc chng trnh con v r t kh khn khi ki m sot gi tr c a chng khi chng trnh thi hnh. (Ch , b n nn phn bi t gi a bi n ton c c v h ng s ton c c) 2. nh ngha v ci t c a cc l p ph i c chia thnh nhi u file ta c th d dng ti s d ng. nh ngha cc l p c lu trong cc file header v i m r ng *.h. Ci t c a cc thnh vin c a l p lu trong file ngu n v i m r ng *.cpp. Thng th ng m i l p c m t c p file *.H v *.CPP, nhng c th g p cc l p c lin quan vo m t c p file.Cu i m i file *.H l ch th #include n file *.CPP.Cu i m i file *.CPP l cc "chng trnh chnh" dng test file CPP km theo cc #define thch h p cho vi c test. Chng trnh chnh c lu trong m t
file ngu n ring v include cc file header c a cc l p c dng n. 3. M i file header c a l p nn s d ng cc nh h ng #ifndef, #define, v #endif m b o m i file header ch c include 1 l n. K hi u c #define nn l tn c a file header vi t ton b ng ch hoa v i m t d u g ch d i ( _ ) thay cho d u ch m. V d : //counter.h #ifndef COUNTER_H #define COUNTER_H class Counter { //... }; // end Counter #include "counter.cpp" #endif // COUNTER_H Chu n ti li u
1. S d ng // cho cc ch thch. Ch dng /* */ t m th i v hi u ha cc o n chng trnh test v debug. 2. M i file ngu n, c .CPP v .H, u ph i b t u b ng m t kh i ch thch ng i c c th k t n i cc file n u chng b tch ra. M u nh sau: //--------------------------------------------------------------------// Name: H tn // Class: L p // Project: m t /tn d n (m t dng, gi ng nhau t i m i file) // Purpose: M c ch s d ng c a m chng trnh ho c cc khai bo trong file ny //---------------------------------------------------------------------
M i l p, hm, phng th c ph i c m t kh i ch thch m t ng n g n l p, hm, phng th c lm g; i v i hm/phng th c: li t k t t c cc tham s , nu r ngha c a tham s ; v m t i u ki n tr c v sau c a hm/phng th c .Ch n cc tn c ngha s n gi n ha cc ch thch. Lu , ti li u v phng th c t t i nh ngha l p (*.H) ta c th sao chp ti li u vo file *.CPP nhng khng b t bu c.
3. C th ch thch cc o n code bn trong hm, tuy nhin ch nn ch thch hi u. Qu nhi u ch thch v ch thch th a lm code trng r i. T t c cc ch thch ph i c li u dng cng o n code quanh n.
Tn:
t tn m t cch nh t qun
Cc bi n c lin quan ph i c t cc tn c lin quan, ng th i ph i lm n i b t c s khc nhau c a chng. Cc tn trong l p sau y v a qu di v a khng h nh t qun: class UserQueue { int noOfItemsInQ, frontOfTheQueue, queueCapacity; public int noOfUsersInQueue() {...} };
Th nh t, cng m t n i dung l queue nhng c bi u di n b i ba d u hi u: Q, Queue v queue. Th hai, cc bi n v cc hm thnh ph n c a l p UserQueue ch c th c s d ng b i cc i t ng c a l p ny, do v y vi t queue.queueCapacity hay queue.noOfUsersInQueue() r rng l th a. Chng ta c th vi t l i l p ny v i cc tn m i nh sau: class UserQueue { int nitems, front, capacity; public int nusers() {...} } Khng ch b n thn o n m nh ngha l p d hi u hn, m nh ng o n m s d ng l p UserQueue cng d hi u hn:
Tn bi n v tn hm:
o Th ng ph i l cc t ho c c m t . Ngo i l duy nh t: con m vng for() i khi c th ch c n dng tn l 1 ch ci ch ng h n i o khng vi t t t tr cc t vi t t t thng d ng ch ng h n HTML, khi coi t vi t t t nh t thng th ng (tn s c d ng convertToHtml thay v convertToHTML) o t tn cho cc namespace nn b ng ch in th ng ton b : Ex: mynamespace, com.company.application.ui o Tn bi n l m t danh t b t u b ng m t k t in th ng, cc t ti p theo c b t u b ng m t k t in hoa: Ex: line, audioSystem o t cc tn ng cho hm: Tn hm nn l m t ng t theo sau b i m t danh t . V d : now = date.getTime(); Cc hm tr v gi tr boolean nn c t tn th hi n gi tr m n tr v . V d : isOctal( c ) th t t hn l: checkOctal( c ); v cch t tn th nh t cho bi t ngay r ng hm tr v gi tr true n u c l m t s octal v tr v false trong tr ng h p ng c l i. o Tn hm th hi n ch c nng Cc ti n t th ng c s d ng: 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 th c truy c p tr c ti p n thu c tnh: getName(), setSalary(int) +find c th c s d ng trong cc phng th c tm ki m: vertex.findNearestVertex();matrix.findSmallestElement();node.findShortestPath(Node destinationNode); +T p h p nhi u i t ng nn c t tn c t tn s nhi u: vector<Point> points; int[] values; +Nh ng bi n ch s l ng i t ng nn c ti n t n: Tn class (v struct): nLines nPoints, Dng ch hoa t t c cc ch ci u m i t , cn l i l cc ch ci th ng. V d : GameBoard, Game.
nh d ng
Khng d li u c a l p d ng public. H n ch t i a vi c dng bi n ton c c. Nguyn t c quy n u tin t i thi u: ch cho hm quy n truy nh p th c hi n nhi m v c a mnh, khng cho
nhi u quy n hn. const c s d ng cho m t bi n khi hm khng c n thay i bi n c tham chi u n . N u hm khng c s a gi tr c a m t tham s , ch truy n tham s vo l gi tr i v i cc ki u n gi n, m ng ph i c truy n d i d ng "const []", v cc ki u struct/class nn truy n d ng "const &" ho c "const *".
H n ch #include ngoi chu n, VD: conio.h Nn int main()v return 0;thay v void main() Khai bo using std:: ngay c khi IDE khng b t bu c. (dng using namespace std; khng t t l m)
2. Cc h ng s khng nn vi t tr c ti p vo chng trnh. Thay v th , ng i ta th ng s d ng l nh #define hay const t cho nh ng h ng s ny nh ng tn c ngha. i u ny s gip l p trnh vin d ki m sot nh ng chng trnh l n v gi tr c a h ng s khi c n thay i th ch ph i thay i m t l n duy nh t gi tr nh ngha ( #define hay const). V d : popChange = (0.1758 - 0.1257) * population; nn c vi t l: const double BIRTH_RATE = 0.1758, DEATH_RATE = 0.1257; ho c: #define BIRTH_RATE 0.1758 #define DEATH_RATE 0.1257
//... popChange = (BIRTHRATE - DEATH_RATE) * population; Ghi ch: b n khng nn dng #define th ng xuyn nh ngha cc h ng s , b i v trong qu trnh debug, b n s khng th xem c gi tr c a m t h ng s nh ngha b ng #define. Khi lm vi c v i cc k t , hy s d ng cc h ng k t thay v cc s nguyn. V d ki m tra xem c c ph i m t ch ci hoa hay khng, c th dng o n m sau: if( c >= 65 && c <= 90 ) ... Nhng o n m ny hon ton ph thu c vo b m bi u di n k t ang c s d ng. Cch t t hn l vi t nh sau: if( c >= A && c <= Z ) ... 3.Lun vi t new v delete thnh t ng c p.
char* p, q, r; // q, r khng l con tr Trong tr ng h p ny nn vi t l: char *p, *q, *r; (lu t ny cng c dng khi khai bo tham chi u v i d u &) 5. Nn s d ng cc d u ( ) khi mu n trnh cc l i 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)); B ng sau trong sch C Programming Language ch ra th t u tin cc ton t trong C. Hng trn cng c m c u tin cao nh t. Ton t ([-. ! -- ++ { * & (type-cast) sizeof + - (1 ngi) * /% +<< >> < <= > >= == != & ^ | && || ?: = += -= *= /= %= &= ^= |= <<= >>= , D ch T tri qua ph i T ph i qua tri T tri qua ph i T tri qua ph i T tri qua ph i T tri qua ph i T tri qua ph i T tri qua ph i T tri qua ph i T tri qua ph i T tri qua ph i T tri qua ph i T tri qua ph i T ph i qua tri T tri qua ph i
Dng b ng ny, c th th y r ng char *a[10]; l m t m ng 10 con tr k t . B n cng th y r ng t i sao l i c n d u ngo c khi dng (*p).i. Sau khi th c hnh, b n s nh b ng ny.
6.Tch cc bi u th c ph c t p thnh cc bi u th c n gi n hn Bi u th c sau y r t ng n g n nhng l i ch a qu nhi u php ton: *x += ( *xp = ( 2*k < ( n m ) ? c[ k + 1 ] : d[ k ] ) ); Chng ta nn vi t l i nh sau: if( 2*k < n m ) *xp = c[ k + 1 ]; else *xp = d[ k ]; *x += *xp;
7.Vi t cc l nh d hi u, khng vi t cc l nh khn ngoan Cc l p trnh vin th ng thch vi t cc l nh cng ng n g n cng t t. Tuy nhin i u ny th ng gy phi n toi cho ng i khc. Hy xem bi u th c sau y lm g: subkey = subkey >> ( bitoff ( ( bitoff >> 3 ) << 3 ) ); Bi u th c trong cng ( bitoff >> 3 ) d ch ph i bitoff 3 bit. K t qu thu c l i c d ch tri 3 bit. B i v y 3 bit cu i cng c a bitoff c thay th b i cc s 0. K t qu ny l i c tr i b i gi tr ban u c a bitoff, k t qu c a php tr chnh l 3 bit cu i cng trong gi tr ban u c a bitoff. Ba bit ny c dng d ch subkey sang ph i. B i v y, bi u th c ni trn tng ng v i bi u th c sau y: subkeu = subkey >> ( bitoff & 07 ); R rng cch vi t th hai d hi u hn nhi u. M t v d khc v cch vi t bi u th c ng n g n nhng lm ph c t p ha v n : child = ( ! LC && ! RC ) ? 0 : ( ! LC ? RC : LC );
10 | P h o n g c c h l p t r n h C + +
child = 0; else if( LC == 0 ) child = RC; else child = LC;
Ton t ? : ch thch h p cho nh ng bi u th c ng n ki u nh sau y: max = ( a > b ) ? a : b; ho c: printf( The list has %d item%s\n, n, n == 1 ? : s ); Hy nh r ng m c tiu c a chng ta l vi t nh ng o n m d hi u, ch khng ph i cc o n m ng n g n. 8.C n th n v i d u = = v == l 2 ton t gy nh n l n nh t trn C, nhng b n c th trnh g p n b ng thi quen vi t r-value (bi u th c bn ph i php gn) sang bn tri php so snh: if ( a == 42 ) { ... }// Cch vi t thng th ng. if ( 42 == a ) { ... }// Nn vi t th ny. V y l s khc bi t, khi b n nh m ... if ( a = 42 ) { ... }// Ch y bnh th ng, kh tm ra l i if ( 42 = a ) { ... }// Bo l i ngay ch ny
9. Cc idiom Cng gi ng nh ngn ng t nhin, ngn ng l p trnh cng c cc idiom (thnh ng !?), l cc cch vi t code chnh t c cho cc tr ng h p thng d ng, t m hi u idiom l cc chu n khng b t bu c nhng c a s ng i dng tun theo. S d ng cc idiom gip gi m b t kh nng m c l i ng th i lm chng trnh d c hn v nh t l c v 1.Cc idiom cho m ng chuyn nghi p hn Sau y l m t s idiom ph bi n: duy t qua n ph n t c a m t m ng v kh i t o chng, c cc cch vi t sau y: i = 0; while ( i <= n 1 ) array[ i++ ] = 1.0; ho c for( i = 0; i < n; ) array[ i++ ] = 1.0; ho c
11 | P h o n g c c h l p t r n h C + +
for( i = n; -i >= 0; ) array[ i ] = 1.0; T t c nh ng cch vi t trn u ng, tuy nhin idiom cho tr ng h p ny l: for( i = 0; i < n; ++i ) array[ i ] = 1.0; M t lu nh l s khc bi t gi a i++ v ++i: i++ l y gi tr c a i tr c r i tng n ln. ++i tng gi tr c a i r i l y gi tr m i. Do i v i cc con m vng l p (for(),while()) nn dng ++i tng t c . Idiom c a vng l p duy t qua cc ph n t c a m t danh sch (list) l for( p = list; p != NULL; p = p->next ) ... i v i container: vector<string>::iterator it; for(it = v.begin(); it != v.end(); ++it) std::cout << *it; i v i cc vng l p v h n, idiom l: for ( ; ; ) ho c while( 1 ) Kh i t o danh sch: struct info { char *name; char *job; char *address; }; info *array[] = { { "name1", "job1", "add1" }, { "name1", "job1", "add1" }, { "name1", "job1", "add1" }, //... }; Hm tm ki m tuy n 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 m ng:
12 | P h o n g c c h l p t r n h C + +
Gi s 2 m ng double *a,*b; thay v: for(int i=0; i<n; ++i) b[i]=a[i]; ta c th dng: //#include<string.h> memcpy(b,a,n*sizeof(double)); C p pht ng cho m ng 2 chi u: 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 l nh if Ti p theo l m t idiom dnh cho cu l nh if. Hy xem o n m lo ng ngo ng 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 ) ; Vi t l i o n 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 )
13 | P h o n g c c h l p t r n h C + +
{
printf ( Cant open output file %s\n, argv[2] ) ; fclose( fin ) ; } else { while ( ( c = getc( fin ) ) != EOF) putc( c, fout ); fclose( fin ) ; fclose( fout ) ; }
Nguyn t c khi vi t cc l nh if() l t cc php ton ki m tra i u ki n cng g n cc hnh ng tng ng cng t t.
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 vi t 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 th ng xuyn xu t hi n trong cc chng trnh v i nhi u ngha khc nhau. Trnh d ch s t ng chuy n s 0
14 | P h o n g c c h l p t r n h C + +
thnh ki u thch h p. Tuy nhin nn vi t ra m t cch t ng minh b n ch t c a s 0 m chng ta ang ni n. C th , hy s d ng ( void* )0 ho c NULL bi u di n con tr null trong C, s d ng \0 cho k t null cu i m i xu v s d ng 0.0 cho cc s float ho c double c gi tr khng. ng vi t o n m nh sau p = 0; name[ i ] = 0; x = 0; Hy vi t: p = NULL; name[ i ] = '\ 0'; x = 0.0; S 0 nn dnh cho cc s nguyn c gi tr b ng khng. Tuy nhin trong C++, 0 (thay v NULL) l i c s d ng r ng ri cho cc con tr null, i u ny khng c khuy n khch.