You are on page 1of 14

1|Phong cch l p trnh C++

Smith Nguyen Studio.

PHONG CCH L P TRNH C++


B n ang h c l p trnh, v y b n ngh v m t chng trnh my tnh nh th no? M t chng trnh my tnh c th xem nh m t tc ph m, b i v n c c b i b n (c th by gi , m cng c th l 10 nm sau!), v b i nh ng l p trnh vin khc sau b n ( pht tri n, s a ch a, c p nh t ...). Chnh v l , m t chng trnh my tnh nn p ng c 3 yu c u sau: ng, d c v d hi u. M c ch c a style l lm cho chng trnh tr nn d c i v i ng i vi t v nh ng ng i khc, m t style t t l m t ph n thi t y u c a vi c l p trnh t t. Vi t m t chng trnh ch y ng l cha b i chng trnh khng ch cho my tnh c m cn cc l p trnh vin khc c. Hn n a, m t chng trnh c style t t lun c nhi u kh nng ch y ng hn m t chng trnh c style t i. Ti li u ny cung c p cho b n: 1. M t t p h p cc chu n trnh by chng trnh thng d ng. 2. M t thi quen t b n c m t phong cch l p trnh tng i chuyn nghi p. Tuy nhin, ti li u ny khng c tham v ng c p n ton b cc kha c nh c a m t phong cch l p trnh. N ch ni n nh ng g c n thi t cho b n, m t sinh vin, khi cha tm c m t phong cch ph h p t o c nh ng thi quen t t ngay t u.

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

2|Phong cch l p trnh C++

Smith Nguyen Studio.

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|Phong cch l p trnh C++

Smith Nguyen Studio.

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:

S d ng cc tn c ngha.Tn giu tnh m t cho cc bi n ton c c v tn ng n g n cho cc bi n c c b .Tn


c ngha s gip chng trnh d vi t v d debug hn. N u b n ph i dng tn khng c ngha cho m t ci g th c th b n cha hon ton hi u bi ton mnh ang gi i. Hy c hi u r tr c khi ti p t c l p 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.Ng i ta dng cc tn b t u ho c k t thc b i ch p cho cc bi n con tr (ch ng h n nodep, intp, intpp, doublep), cc tn b t u b ng ch hoa cho bi n ton c c (ch ng h n Globals) v t t c ch ci hoa cho cc h ng s (ch ng h n CONSTANTS). Khuy n co s d ng tn ti ng Anh ki u camel (xem bn d i) Cc namespace trong C++ gp ph n lm r ngha c a cc tn m khng c n s d ng cc tn di.

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:

4|Phong cch l p trnh C++


queue.capacity++; n = queue.nusers();

Smith Nguyen Studio.

L p UserQueue v n c th c i ti n thm, b i nitems v nusers th c ch t l cng bi u di n m t khi ni m v do ch c n s d ng m t trong hai tn m thi.

Tn c a cc project, form, v component sinh b i mi tr ng l p trnh: cc project v form ph i c tn h p l,


nguyn l Form1. Cc component ph i c t tn c ngha, ngo i tr cc component nh Label, Group Box, etc., khng n u chng khng c m t trong code. Cc component nn c t h u t l ki u i t ng: Ex: widthScale, nameText, leftScrollbar, mainForm, myLabel, printerDialog ...

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.

5|Phong cch l p trnh C++

Smith Nguyen Studio.

nh d ng

Li u dng cc o n code, m i m c dng 3 ho c 4 k t , t t nh t l dng tab.


o Ph i th ng nh t, lun dng 3 ho c lun dng 4 k t o Ch khng c dng l n l n gi a k t tab v space li u dng, (cc mi tr ng so n th o c th quy c khc nhau v di c a tab).

M i dng ch ch a nhi u nh t 1 l nh v khng di qu 79 k t . M t l nh c th


c chia thnh nhi u dng, khi cc ph n sau ph i c li u dng h p l. V d : cout << "The cost for 1 loaf of bread" << endl << "is $1.89" << endl;

C th cn th ng hng nng cao hightlight. VD:


int songuyen = 100; double sothuc char kytu char ten[] bool gt[] = = = = 3.14 ; 'a' ; { "tam", "lan", "hiep", "bao", "yen", "tuan", "hoa" }; {0,0,0,1,0,1,0};

Cc kh i v i c p ngo c {} ph i c trnh by 1 trong 2 cch sau:


if (!done) { doSomething(); moreToDo(); } else { // } if (!done) { doSomething(); moreToDo(); } else { // } N u trong kh i ch c 1 l nh th c th b ngo c (t t hn l khng nn) nhng v n li u dng:

6|Phong cch l p trnh C++


for( n++; n < 100; n++ ) field[ n ] = 0; *i = 0; return n;

Smith Nguyen Studio.

Nn c kho ng tr ng gi a t kha v d u (, nhng khng nn c kho ng tr ng gi a tn hm v d u (.


V d : // no space between 'strcmp' and '(', // but space between 'if' and '(' if ( strcmp( input_value, "done" ) == 0 ) return 0; Ngoi ra nn c kho ng gi a d u ngo c c a hm v i s nh trn. Nn c 1 space tr c v sau m i ton t i s h c ho c lgic, ch ng h n +, <<, v ||. Nn dng 1 space sau d u ph y, nhng tr c d u ph y ho c ch m ph y khng nn c d u cch.Ngo i l : khng chn kho ng tr ng vo gi a ton h ng v ton t ++ v -

Chn dng tr ng gi a cc o n khc nhau trong chng trnh.

Thi t k M t s v n th ng g p m sinh vin c n ch :

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 *".

Khng d li u trong l p m n khng th c s thu c v l p . Ch ng h n, n u m t hm c n m t bi n lu m t


k t qu t m th i, khng khai bo m t bi n thu c l p m hy khai bo m t bi n a phng c a hm .

Cc hm ho c phng th c c a l p khng nn t o output tr khi l nhi m v c a phng th c . V d , m t


phng th c print c th s ghi thng tin ra cout, nhng m t thao tc thm ho c b t ci g t m t danh sch th khng.

7|Phong cch l p trnh C++

Smith Nguyen Studio.

M i phng th c/hm (k c hm main()) ch ch a t i a 30 dng k c tnh t ngo c m hm { t i ngo c k t


thc hm }.

CODE 1.Vi t code theo chu n ISO d compiler c b t bu c hay khng.

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.

8|Phong cch l p trnh C++

Smith Nguyen Studio.

4. Khi khai bo con tr , d u con tr nn c t li n v i tn, nh m trnh tr ng h p sau:

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

9|Phong cch l p trnh C++

Smith Nguyen Studio.

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 );

Cch vi t d i y di hn, nhng d hi u hn nhi u: if( LC == 0 && RC == 0 )

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;

Smith Nguyen Studio.

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 + +

Smith Nguyen Studio.

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;

Smith Nguyen Studio.

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 + +
{

Smith Nguyen Studio.

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 + +

Smith Nguyen Studio.

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.

M i s vi ph m u c cho php n u n gip cho t i u o n m c a b n.


M c ch chnh c a cc quy t c ny l lm cho m ngu n d c hi u hn, d dng s a l i v b o tr, nng ch t l ng chung c a m ngu n. Tuy nhin, n s khng th p d ng ng v i m i tr ng h p c th , v cc l p trnh vin ph i s d ng m m d o cc quy c ny.

You might also like