Professional Documents
Culture Documents
Phong Cach Lap Trinh C++ PDF
Phong Cach Lap Trinh C++ PDF
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.
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)
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
{
//...
}; // 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:
3|Phong cch lp trnh C++
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).
Cc bin c lin quan phi c t cc tn c lin quan, ng thi phi lm ni bt c s khc nhau ca chng.
Cc tn trong lp sau y va qu di va khng h nht qun:
class
UserQueue
{
int noOfItemsInQ, frontOfTheQueue, queueCapacity;
public int noOfUsersInQueue() {...}
};
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()
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.
4|Phong cch lp trnh C++
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:
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):
V d: GameBoard, Game.
nh dng
V d :
cout << "The cost for 1 loaf of bread" << endl
<< "is $1.89" << endl;
if (!done)
{
doSomething();
moreToDo();
}
else
{
//
}
if (!done) {
doSomething();
moreToDo();
} else {
//
}
field[ n ] = 0;
6|Phong cch lp trnh C++
*i = 0;
return n;
Thit k
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 .
CODE
Khai bo using std:: ngay c khi IDE khng bt buc. (dng using namespace std; khng tt lm)
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:
//...
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:
4. Khi khai bo con tr, du con tr nn c t lin vi tn, nhm trnh trng hp sau:
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 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.
9|Phong cch lp trnh C++
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.
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.
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 );
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 + +
max = ( a > b ) ? a : b;
hoc:
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:
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:
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 + +
i vi container:
vector<string>::iterator it;
for(it = v.begin(); it != v.end(); ++it)
std::cout << *it;
struct info
{
char *name;
char *job;
char *address;
};
info *array[] = {
{ "name1", "job1", "add1" },
{ "name1", "job1", "add1" },
{ "name1", "job1", "add1" },
//...
};
memcpy(b,a,n*sizeof(double));
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 ) {
} 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 ) ;
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 )
{
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();
case '.': break;
case '0': case 'o': default: if (!isdigit(c)) return 0;
}
switch (c)
{
case '-':
sign = -1;
case '+':
c = getchar();
break;
case '.':
break;
default: case '0': case 'o':
if (!isdigit(c))
return 0;
break;
}
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.