Professional Documents
Culture Documents
Phong Cach Lap Trinh C
Phong Cach Lap Trinh C
//...
}; // end Counter
#include "counter.cpp"
#endif // COUNTER_H
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
= 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
};
*i = 0;
return n;
Thit k
const c s dng cho mt bin khi hm khng cn thay i bin c tham chiu n .
CODE
1.Vit code theo chun ISO d compiler c bt buc hay khng.
//...
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 )
...
Dch
([-.
* /%
+ -
<< >>
== !=
&
&&
||
?:
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.
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 );
10 | P h o n g c c h l p t r n h C + +
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 + +
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;
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.
switch (c)
{
case '-':
sign = -1;
case '+':
c = getchar();
break;
case '.':
break;
default: case '0': case 'o':
if (!isdigit(c))
return 0;
break;
}
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.