You are on page 1of 200

http://vietjack.com/cplusplus/index.

jsp

Copyright vietjack.com

Mc lc
Hc C++ c bn v nng cao ............................................................................................... 9
i vi c gi ...................................................................................................................... 9
iu kin tin ................................................................................................................... 9
Tng quan v C++................................................................................................................ 9
Lp trnh hng i tng.............................................................................................. 10
Th vic chun C++ (C++ Standard Library) .................................................................. 10
ANSI Standard................................................................................................................ 10
Hc tp C++ nh th no? ............................................................................................. 10
Min s dng ca C++ ................................................................................................... 11
Ci t mi trng C++ ...................................................................................................... 11
Ci t mi trng ni b cho C++ ................................................................................. 11
Text Editor ...................................................................................................................... 11
C++ Compiler: ................................................................................................................ 11
Ci t GNU C/C++ Compiler......................................................................................... 12
Ci t trn UNIX/Linux .................................................................................................. 12
Ci t trn Mac OS X .................................................................................................... 12
Ci t trn Windows...................................................................................................... 12
C php C++ c bn .......................................................................................................... 13
Cu trc chng trnh C++ ............................................................................................. 13
Bin dch v thc thi chng trnh C++........................................................................... 14
Du chm phy v khi (block) trong C++ ...................................................................... 15
nh danh (Identifier) trong C++ ...................................................................................... 16
T kha trong C++ ......................................................................................................... 16
Trigraph trong C++.......................................................................................................... 17
Khong trng (Whitespace) trong C++............................................................................ 18
Comment trong C++........................................................................................................... 19
Kiu d liu trong C++ ........................................................................................................ 20
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 1

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Kiu d liu nguyn thy trong C++................................................................................ 20


Khai bo typedef trong C++ ............................................................................................ 23
Kiu lit k enum trong C++............................................................................................ 24
Kiu bin trong C++ ............................................................................................................ 24
nh ngha bin trong C++ .............................................................................................. 25
Khai bo bin trong C++ ................................................................................................. 26
V d ............................................................................................................................... 27
Lvalue v Rvalue trong C++............................................................................................ 28
Phm vi bin trong C++ ...................................................................................................... 29
Bin cc b trong C++ .................................................................................................... 29
Bin ton cc trong C++ ................................................................................................. 30
Khi to bin cc b v bin ton cc trong C++ ............................................................ 31
Hng (Constant/Literal) trong C++ ...................................................................................... 32
Hng s nguyn trong C++............................................................................................. 32
Hng s thc trong C++ ................................................................................................. 33
Boolean literal trong C++................................................................................................. 33
Hng k t trong C++ ..................................................................................................... 34
Hng chui trong C++..................................................................................................... 35
nh ngha hng trong C++............................................................................................. 36
S dng b tin x l #define trong C++......................................................................... 36
S dng t kha const trong C++................................................................................... 37
Modifier trong C++ .............................................................................................................. 37
Qualifier trong C++.......................................................................................................... 39
Lp lu tr (Storage Class) trong C++................................................................................ 39
Lp lu tr auto trong C++ ............................................................................................. 40
Lp lu tr register trong C++......................................................................................... 40
Lp lu tr static trong C++ ............................................................................................ 41
Lp lu tr extern trong C++ .......................................................................................... 42
Lp lu tr mutable trong C++ ....................................................................................... 43
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 2

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Ton t trong C++ .............................................................................................................. 43


Ton t s hc trong C++ ............................................................................................... 44
Ton t quan h trong C++ ............................................................................................ 45
Ton t logic trong C++ .................................................................................................. 45
Ton t so snh bit trong C++ ........................................................................................ 46
Ton t gn trong C++ ................................................................................................... 49
Cc ton t hn hp trong C++ ...................................................................................... 51
Th t u tin ton t trong C++ .................................................................................... 52
Vng lp trong C++............................................................................................................. 53
Cc lnh iu khin vng lp trong C++.......................................................................... 55
Vng lp v hn trong C++ ............................................................................................. 55
iu khin lung trong C++ ................................................................................................ 56
Ton t iu kin ? : trong C++....................................................................................... 57
Hm trong C++................................................................................................................... 57
nh ngha mt hm trong C++....................................................................................... 58
V d ............................................................................................................................... 59
Khai bo hm trong C++................................................................................................. 59
Gi hm trong C++ ......................................................................................................... 60
Tham s ca hm trong C++: ......................................................................................... 61
Gi tr mc nh cho cc tham s trong C++.................................................................... 62
Number trong C++.............................................................................................................. 63
nh ngha Number trong C++........................................................................................ 63
Hm ton hc trong C++ ................................................................................................ 65
S ngu nhin (Random Number) trong C++ ................................................................. 67
Mng (Array) trong C++ ...................................................................................................... 68
Khai bo mng trong C++............................................................................................... 69
Khi to mng trong C++ ............................................................................................... 69
Truy cp cc phn t mng trong C++ ........................................................................... 70
Chi tit v mng trong C++ ............................................................................................. 71
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 3

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Chui (String) trong C++ ..................................................................................................... 72


Chui theo phong cch C ............................................................................................... 72
Lp String trong C++ ...................................................................................................... 75
Con tr trong C++ ............................................................................................................... 76
Con tr l g? .................................................................................................................. 77
Cch s dng con tr trong C++..................................................................................... 78
Chi tit v con tr trong C++............................................................................................ 79
Tham chiu trong C++ ........................................................................................................ 79
Tham chiu v con tr trong C++.................................................................................... 80
To tham chiu trong C++ .............................................................................................. 80
Date v Time trong C++...................................................................................................... 82
Date v Time hin ti trong C++...................................................................................... 84
nh dng Time bi s dng cu trc tm trong C++ ....................................................... 85
Input/Output trong C++ ....................................................................................................... 86
Header file cho I/O trong C++.......................................................................................... 86
Standard Output Stream (cout) trong C++ ...................................................................... 87
Standard Input Stream (cin) trong C++............................................................................ 87
Standard Error Stream (cerr) trong C++ .......................................................................... 88
Standard Log Stream (clog) trong C++ ........................................................................... 89
Cu trc d liu trong C++.................................................................................................. 90
nh ngha mt cu trc trong C++ ................................................................................. 90
Truy cp cc thnh vin ca cu trc trong C++ ............................................................. 91
Cu trc nh l tham s hm trong C++ ......................................................................... 93
Con tr ti cu trc trong C++ ......................................................................................... 94
T kha typedef trong C++ ............................................................................................. 97
Lp v i tng trong C++............................................................................................... 97
nh ngha Lp trong C++ .............................................................................................. 98
nh ngha i tng trong C++..................................................................................... 98
Truy cp cc thnh vin d liu trong C++...................................................................... 99
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 4

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Chi tit v Lp & i tng trong C++ .......................................................................... 100


Tnh k tha trong C++..................................................................................................... 101
Lp c s (Base Class) v Lp tha k (Derived Class) trong C++ ............................. 102
iu khin truy cp v Tnh k tha trong C++ ............................................................. 103
Kiu k tha trong C++................................................................................................. 104
a k tha trong C++ ................................................................................................... 105
Np chng ton t v Np chng hm trong C++ ............................................................ 107
Np chng hm trong C++ ........................................................................................... 107
Np chng ton t trong C++ ....................................................................................... 109
Ton t c th np chng v khng th np chng trong C++...................................... 112
V d v Np chng ton t trong C++.......................................................................... 112
a hnh trong C++ ............................................................................................................ 113
Hm virtual trong C++ ................................................................................................... 116
Hm pure virtual trong C++ ........................................................................................... 116
Tru tng ha d liu trong C++.................................................................................... 117
Nhn truy cp (Access Label) trong C++....................................................................... 118
Li ch ca Tru tng ha d liu trong C++.............................................................. 119
V d v Tru tng ha d liu trong C++ .................................................................. 119
Chin lc thit k trong C++ ....................................................................................... 120
Tnh ng gi d liu trong C++........................................................................................ 121
V d v ng gi d liu trong C++ ............................................................................. 122
Chin lc thit k trong C++ ....................................................................................... 123
Interface trong C++ (Lp tru tng)................................................................................ 123
V d v Lp tru tng trong C++............................................................................... 124
Chin lc thit k trong C++ ....................................................................................... 127
File v Stream trong C++ .................................................................................................. 127
M mt File trong C++.................................................................................................. 128
ng mt File trong C++............................................................................................... 129
Vit ti mt File trong C++............................................................................................. 129
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 5

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

c mt File trong C++ ................................................................................................. 129


V d v c v Vit file trong C++................................................................................ 129
Con tr v tr File trong C++............................................................................................ 131
X l ngoi l (Exception Handling) trong C++.................................................................. 132
Nm Exception trong C++ ............................................................................................ 133
Bt Exception trong C++ ............................................................................................... 134
Standard Exception trong C++...................................................................................... 135
nh ngha Exception mi trong C++ ............................................................................ 137
B nh ng trong C++ .................................................................................................... 139
Ton t new v delete trong C++.................................................................................. 139
Cp pht b nh ng cho Mng trong C++................................................................. 141
Cp pht b nh ng cho i tng trong C++.......................................................... 141
Namespace trong C++ ..................................................................................................... 142
nh ngha mt Namespace trong C++ ........................................................................ 143
using namespace directive trong C++ ........................................................................... 144
Namespace khng k nhau trong C++ ......................................................................... 146
Namespace lng nhau trong C++ ................................................................................. 146
Template trong C++.......................................................................................................... 148
Function Template trong C++ ....................................................................................... 148
Class Template trong C++ ............................................................................................ 150
B tin x l (Preprocessor) trong C++ ............................................................................. 152
B tin x l # define trong C++ .................................................................................... 153
Function-Like Macro trong C++..................................................................................... 154
Bin dch c iu kin trong C++................................................................................... 155
Cc ton t # v ## trong C++...................................................................................... 156
Macro tin nh ngha trong C++ ................................................................................... 158
X l tn hiu (Signal Handling) trong C++......................................................................... 159
Hm signal() trong C++................................................................................................. 160
Hm raise() trong C++ .................................................................................................. 161
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 6

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

a lung (Multithread) trong C++ ...................................................................................... 163


To Thread trong C++ .................................................................................................. 163
Kt thuc Thread trong C++.......................................................................................... 164
V d ............................................................................................................................. 165
Truyn tham s ti Thread trong C++ ........................................................................... 166
Kt hp v Tho g cc Thread trong C++ .................................................................. 168
Lp trnh Web trong C++ .................................................................................................. 171
CGI l g?...................................................................................................................... 171
Web Browsing .............................................................................................................. 171
S cu trc CGI ....................................................................................................... 172
Cu hnh Web Server ................................................................................................... 172
Chng trnh CGI u tin ........................................................................................... 173
Hello World! This is my first CGI program...................................................................... 174
HTTP Header ............................................................................................................... 174
Bin mi trng ca CGI.............................................................................................. 175
Th vin CGI trong C++ ............................................................................................... 178
Phng thc POST v GET ........................................................................................ 178
Truyn thng tin bi s dng phng thc GET .......................................................... 178
V d URL n gin s dng phng thc GET.......................................................... 179
V d v FORM bi s dng phng thc GET........................................................... 181
Truyn thng tin bi s dng phng thc POST ....................................................... 181
Truyn Checkbox Data ti CGI Program ...................................................................... 182
Truyn Radiobutton Data ti CGI Program ................................................................... 184
Truyn Text Area Data ti CGI Program....................................................................... 186
Truyn DropDown Box Data ti CGI Program.............................................................. 187
S dng Cookie trong CGI ........................................................................................... 189
Cch n lm vic .......................................................................................................... 189
Thit lp Cookie ............................................................................................................ 190
Thu hi Cookie.............................................................................................................. 191
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 7

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

V d v File Upload...................................................................................................... 193


Th vin Template chun (STL) trong C++ ...................................................................... 195
Th vin chun C++ (C++ Standard Library) .................................................................... 198
Th vin hm chun trong C++ (Standard Function Library)......................................... 198
Th vin lp hng i tng trong C++ (Object Oriented Class Library).................... 198
Ti liu tham kho C++..................................................................................................... 199
Link hu ch v C++...................................................................................................... 199

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 8

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Hc C++ c bn v nng cao


C++ l ngn ng lp trnh bc trung (middle-level), c pht trin bi Bjarne Stroustrup nm 1979
ti Bell Labs. C++ chy trn cc nn tng a dng, nh Windows, Mac OS, v cc phin bn Unix
a dng.
Bi hng dn ny s cung cp chi tit khi nim v C++ t c bn ti nng cao, km theo cc v
d thc hnh trc tuyn a dng gip bn thch th bi hc v hiu su hn cc khi nim
c cp.
Lot bi hng dn ca chng ti da trn ngun ti liu ca: Tutorialspoint

i vi c gi
Lot bi hng dn v C++ c chun b cho ngi mi hc, gip h hiu cc khi nim C++ t
c bn ti nng cao.

iu kin tin
Trc khi bt u hc theo lot bi ny v thc hnh vi cc v d v C++ a dng, mnh gi s
rng bn bit khi nim v mt chng trnh my tnh l g v th no l mt ngn ng lp trnh
my tnh.

Tng quan v C++


C++ l mt ngn ng lp trnh kiu tnh, mc ch tng qut, phn bit kiu ch m h tr lp trnh
hng i tng, lp trnh th tc.
C++ c coi nh l ngn ng bc trung (middle-level), khi n kt hp cc c im v tnh
nng ca ngn ng bc cao v bc thp.
C++ c pht trin bi Bjarne Stroustrup nm 1979 ti Bell Labs Murray Hill, New Jersey, nh
l mt bn nng cao ca ngn ng C v vi tn gi u tin l C vi cc Lp, nhng sau
c i tn thnh C++ vo nm 1983.
C++ l mt Superset ca C, v bt k chng trnh C no cng l mt chng trnh C++.
Ghi ch: Khi ni mt ngn ng lp trnh l kiu tnh khi vic kim tra kiu c thc hin trong
thi gian bin dch (compile-time), ch khng phi l run-time.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 9

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Lp trnh hng i tng


C++ h tr y lp trnh hng i tng, bao gm 4 tnh nng tr ct ca lp trnh hng i
tng l:

Tnh bao ng (Encapsulation)

n d liu (Data hiding)

Tnh k tha (Inheritance)

Tnh a hnh (Polymorphism)

Th vic chun C++ (C++ Standard Library)


C++ chun gm 3 phn quan trng:

Core Language cung cp tt c cc khi bao gm bin, kiu d liu (data type) v literals,

Th vin chun C++ (C++ Standard Library) cung cp tp hp hm a dng thao tc file,
string,

Standard Template Library (STL) cung cp tp hp phng thc a dng thao tc cu


trc d liu,

ANSI Standard
ANSI Standard bo m rng C++ l portable, ngha l: code bn vit cho compiler ca Microsoft
s c bin dch m khng xy ra li khi s dng mt compiler trn Mac, UNIX, v Windows box
hoc mt Alpha.
ANSI Standard tn ti trong thi gian di, v tt c C++ compiler u h tr ANSI Standard.

Hc tp C++ nh th no?
iu quan trng nht khi hc tp C++ l trng tm vo cc khi nim.
Mc ch ca vic hc mt ngn ng lp trnh l tr thnh mt lp trnh vin gii hn, tc l
thit k v thc thi cc h thng mi hiu qu hn, hoc sa i chng trnh c.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 10

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

C++ h tr cc phong cch lp trnh a dng. Bn c th vit trong Fortran, C, Smalltalk, trong
bt k ngn ng no. Mi style c th t c mc tiu ca n mt cch hiu qu trong khi duy tr
runtime v space hiu qu.

Min s dng ca C++


C++ c s dng bi hng nghn lp trnh vin trong mi lnh vc ng dng c bn.
C++ ang c s dng ph bin vit device driver v cc phn mm khc m da vo thao
tc trc tip ca phn cng di rng buc v realtime.
C++ c s dng rng ri o to, nghin cu.
Bt c hai s dng Apple Macintosh hoc mt PC chy trn Windows l gin tip s dng
C++, bi v User Interface ca cc h thng ny c vit bng C++.

Ci t mi trng C++
Ci t mi trng ni b cho C++
Nu bn mun ci t mi trng C++, bn cn hai phn mm c sn trong my sau y:

Text Editor
N s c s dng son chng trnh ca bn. V d nh Windows Notepad, OS Edit
command, Brief, Epsilon, EMACS v Vim hoc Vi.
Tn v phin bn ca Text Editor c th a dng trn cc h iu hnh khc nhau. V d, Notepad
s c s dng trn Windows v Vim hoc Vi c th c s dng trn Windows cng nh Linux
hoc UNIX.
Cc file, m bn to vi editor ny, c gi l cc source file v vi C++, chng c t tn vi
ui m rng l .cpp, .cp, hoc .c.
Trc khi bt u lp trnh, m bo rng bn c mt Text editor v bn c kinh nghim
son mt chng trnh C++.

C++ Compiler:
C++ Compiler c s dng bin dch source code ca bn thnh chng trnh c th thc thi.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 11

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Hu ht C++ compiler khng quan tm phn ui m rng bn cung cp cho source code, nhng
nu bn khng xc nh, th theo mc nh, n s s dng ui l .cpp.
Compiler c s dng thng xuyn nht l GNU C/C++ compiler, hoc bn c th s dng cc
Compiler khc t HP hoc Solaris nu bn c H iu hnh tng ng.

Ci t GNU C/C++ Compiler


Ci t trn UNIX/Linux
Nu bn ang s dng Linux hoc UNIX, th kim tra xem GCC c ci t trn h thng
cha bng vic nhp lnh sau ti dng lnh (command line):
$ g++ -v

Nu bn ci t GCC, th n s in thng bo sau:


Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr .......
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)

Nu

GCC

cha

ci

t,

bn

cn

phi

ci

theo

hng

dn

ti:http://gcc.gnu.org/install/

Ci t trn Mac OS X
Nu bn s dng Mac OS X, cch n gin nht ci t GCC l ti mi trng pht trin Xcode
t Website ca Applet v theo cc ch dn.
Bn c th ti Xcode t: developer.apple.com/technologies/tools/.

Ci t trn Windows
ci t GCC trn Windows, bn cn ci t MinGW. ci t MinGW, bn truy
cp:www.mingw.org, v t ti trang ti MinGW. Ti phin bn mi nht ca MinGW, s c
tn l MinGW-<version>.exe.
Trong khi ci t MinGW, ti thiu bn phi ci t gcc-core, gcc-g++, binutils, v MinGW runtime.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 12

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Thm th mc ph bin ca MinGW ti bin mi trng PATH, m bn c th xc nh cc tool


trn command line bi cc tn n gin ca chng.
Khi vic ci t hon tt, bn c th chy gcc, g++, ar, ranlib, dlltool, v mt s GNU tool khc t
Windows command line.

C php C++ c bn
Khi chng ta xem xt mt chng trnh C++, n c th c nh ngha nh l mt tp hp ca
cc i tng, m giao tip thng qua vic triu hi cc phng thc ca mi i tng . Di
y, chng ti miu t ngn gn ngha ca class (lp), object (i tng), method (phng thc)
v cc bin i tng:

Object - i tng c cc trng thi v hnh vi. V d: mt i tng dog c cc trng thi
l color, name, breed, v cc hnh vi l wagging, barking, eating. Mt i tng l mt
minh ha ca mt lp.

Class - Mt lp c th c nh ngha nh l mt template/blueprint, m miu t hnh


vi/trng thi m i tng h tr.

Methods - V c bn, mt phng thc l mt hnh vi. Mt lp c th cha nhiu phng


thc. Phng thc l ni tnh logic c vit, d liu c thao tc v tt c action c
thc thi.

Instant Variables - Mi i tng c tp hp bin i tng duy nht ca n. Trng thi


ca mt i tng c to ra bi cc gi tr c gn cho cc bin i tng ca n.

Cu trc chng trnh C++


Bn theo di mt on code n gin s in Hello World.
#include <iostream>
using namespace std;

// main() is where program execution begins.

int main()
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 13

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Hello World"; // prints Hello World


return 0;
}

Chng trnh trn c cc phn sau:

Ngn ng C++ nh ngha mt s header, m cha tong tin cn thit v hu ch cho


chng trnh ca bn. Vi chng trnh ny, header l <iostream> l cn thit.

Dng using namespace std; ni cho compiler s dng std namespace. Namespce l phn
b sung gn y cho C++.

Dng tip theo // main() is where program execution begins. l mt comment n dng
trong C++. Cc comment n dng bt u vi // v kt thc cui dng.

Dng int main() l hm main, ti y vic thc thi chng trnh bt u.

Dng tip theo cout << "This is my first C++ program."; lm thng bo This is my first
C++ program c hin th trn mn hnh.

Dng tip theo return 0; kt thc hm main() v lm n tr v gi tr 0 ti tin trnh ang gi.

Bin dch v thc thi chng trnh C++


Di y l cch lu file, bin dch v chy chng trnh. Bn theo cc bc sau:

M mt text editor v thm on code trn.

Lu file vi tn: hello.cpp.

M mt dng nhc lnh (command prompt) v ti th mc ni bn lu file .

Son 'g++ hello.cpp ' v nhn Enter bin dch code trn. Nu khng c li xy ra trong
code ca bn th dng nhc lnh s a bn ti dng tip theo v to a.out file c th thc
thi.

By gi, bn son a.out chy chng trnh.

Bn s thy Hello World c in trn ca s.

$ g++ hello.cpp

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 14

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

$ ./a.out
Hello World

Bn chc chn rng g++ l trong path ca bn v bn ang chy n trong th mc m cha
hello.cpp file.
Bn c th bin dch chng trnh C/C++ bi s dng makefile. bit thm chi tit, bn c th
truy cp: Makefile Tutorial.

Du chm phy v khi (block) trong C++


Trong C++, du chm phy l k t kt thc lnh (statement terminator). Ngha l, mi lnh n
phi kt thc bi mt du chm phy. N ch dn s kt thc ca mt thc th logic.
Di y l v d v 3 lnh khc nhau:
x = y;
y = y+1;
add(x, y);

Mt khi (block) l mt tp hp cc lnh c kt ni mt cch logic, m c bao quanh bi cc


du ngoc mc m v ng. V d:
{
cout << "Hello World"; // prints Hello World
return 0;
}

Hai dng sau l tng ng, C++ khng quan tm bn t bao nhiu lnh trn mt dng. V d:
x = y;
y = y+1;
add(x, y);

L ging vi:
x = y; y = y+1; add(x, y);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 15

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

nh danh (Identifier) trong C++


Mt nh danh (Identifier) trong C++ l mt tn c s dng nhn din mt bin, hm, lp,
module, hoc bt k user-defined item no (ngi dng t nh ngha). Mt nh danh (Identifier)
bt u vi mt ch ci t A ti Z hoc t a ti z hoc mt du gch di (_) c theo sau bi 0
hoc nhiu ch ci, du gch di v k s (t 0 ti 9).
C++ khng cho php cc k t nh @, $ v % bn trong cc Identifier. C++ l ngn ng lp trnh
phn bit kiu ch. V th, Manpower v manpower l hai Identifier khc nhau trong C++.
Di y l mt s v d v Identifier (nh danh) thch hp:
mohd

zara

abc

move_name

a_123

myname50

_temp

a23b9

retVal

T kha trong C++


Bng di lit k cc t c d tr (dnh ring) trong C++. Nhng t ny khng th c s
dng nh l constant hoc bin hoc bt k tn Identifier (nh danh) no.
asm

else

new

this

auto

enum

operator

throw

bool

explicit

private

true

break

export

protected

try

case

extern

public

typedef

catch

false

register

typeid

char

float

reinterpret_cast

typename

class

for

return

union

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 16

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

const

friend

short

unsigned

const_cast

goto

signed

using

continue

if

sizeof

virtual

default

inline

static

void

delete

int

static_cast

volatile

do

long

struct

wchar_t

double

mutable

switch

while

dynamic_cast

namespace

template

Trigraph trong C++


Mt Trigraph l mt dy 3 k t m biu din mt k t n v dy ny lun lun bt u vi 2 du
hi.
Cc Trigraph c m rng bt c ni u chng xut hin, bao gm bn trong String literal v
Character literal, trong comment, v trong cc preprocessor directive (cc directive tin x l).
Di y l cc dy trigraph c s dng thng xuyn nht:
Trigraph

Thay th cho

??=

??/

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 17

http://vietjack.com/cplusplus/index.jsp
??'

??(

??)

??!

??<

??>

??-

Copyright vietjack.com

Tt c compiler khng h tr Trigraph v chng c khuyn l khng nn s dng bi v tnh kh


hiu ca n.

Khong trng (Whitespace) trong C++


Mt dng m ch cha khong trng (Whitespace), c th l mt comment, c bit n nh l
mt dng trng, v C++ hon ton b qua n.
Khong trng (Whitespace) l khi nim c s dng trong C++ miu t blank, tab, k t
newline, v comment. Khong trng (Whitespace) phn bit cc phn ca lnh v gip compiler
nhn din v tr mt phn t trong mt lnh, v d nh int, v tr phn kt thc v v tr phn t tip
theo bt u. Do , trong lnh sau:
int age;

Phi c t nht mt Whitespace (thng l khong trng) gia int v age compiler c th phn
bit chng. Trong lnh:
fruit = apples + oranges;

// Get the total fruit

Cc k t khong trng (Whitespace) gia fruit v =, hoc gia = v apples l khng cn thit; tuy
nhin, gip cho code ca bn d c hn, bn c th thm chng vo.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 18

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Comment trong C++


Comment ca chng trnh l cc li din gii, m bn c th bao trong C++ code, v gip cho bt
k ai c source code d dng hn. Tt c ngn ng lp trnh u cho php mt s mu comment
no .
C++ h tr cc comment n dng v a dng. Tt c k t c trong comment c b qua bi
C++ compiler.
Comment trong C++ bt u vi /* v kt thc vi */. V d:
/* This is a comment */

/* C++ comments can

also

* span multiple lines


*/

Mt comment cng c th bt u vi //, ko di ti phn cui ca dng. V d:


#include <iostream>
using namespace std;

main()
{
cout << "Hello World"; // prints Hello World

return 0;
}

Khi code trn c bin dch, n s b qua // prints Hello World v cui cng cho kt qu sau:
Hello World

Bn trong mt comment dng /* v */, cc k t // khng c ngha c bit g. Bn trong mt


comment dng //, cc k t /* v */ khng c ngha c bit g. V th, bn c th lng (nest) bt
k dng comment no bn trong dng khc. V d:
/* Comment out printing of Hello World:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 19

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Hello World"; // prints Hello World

*/

Kiu d liu trong C++


Trong khi lm vic vi bt k ngn ng lp trnh no, bn cn s dng cc kiu bin a dng
lu gi thng tin. Cc bin, khng g khc ngoi cc v tr b nh c dnh ring lu gi tr.
Ngha l, khi bn to mt bin, bn dnh ring mt s khng gian trong b nh cho bin .
Bn c th thch lu thng tin ca cc kiu d liu (Data Type) a dng nh Character, Wide
Character, integer, floating-point, double floating point, Boolean, . Da trn kiu d liu ca mt
bin, h thng s cp pht b nh v quyt nh nhng g c th c lu gi trong b nh dnh
ring .

Kiu d liu nguyn thy trong C++


Tn ting Anh l Primitive Type, cn c th gi l kiu d liu gc, kiu d liu c sn trong C++.
Bn cnh cc kiu d liu gc ny, C++ cng cung cp cc kiu d liu user-defined. Bng di
y lit k 7 kiu d liu c bn trong C++:
Kiu d liu

T kha

Boolean

bool

Character

char

Integer

int

Floating point

float

Double floating point

double

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 20

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Valueless

void

Wide character

wchar_t

Mt s kiu c bn c th c sa i bi s dng mt hoc nhiu modifier ny:

signed

unsigned

short

long

Bng sau hin th kiu bin, lng b nh n dng lu gi tr trong b nh, v gi tr ln nht v
nh nht c th c lu gi vi cc kiu bin :
Kiu

rng bit

Dy gi tr

char

1byte

-127 ti 127 hoc 0 ti 255

unsigned char

1byte

0 ti 255

signed char

1byte

-127 ti 127

int

4bytes

-2147483648 ti 2147483647

unsigned int

4bytes

0 ti 4294967295

signed int

4bytes

-2147483648 ti 2147483647

short int

2bytes

-32768 ti 32767

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 21

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

unsigned short int

Range

0 ti 65,535

signed short int

Range

-32768 ti 32767

long int

4bytes

-2,147,483,647 ti 2,147,483,647

signed long int

4bytes

Tng t nh long int

unsigned long int

4bytes

0 ti 4,294,967,295

float

4bytes

+/- 3.4e +/- 38 (~7 digits)

double

8bytes

+/- 1.7e +/- 308 (~15 digits)

long double

8bytes

+/- 1.7e +/- 308 (~15 digits)

wchar_t

2 or 4 bytes

1 wide character

Kch c ca cc bin c th khc vi nhng g hin th trn bng, ph thuc vo compiler v my


tnh bn ang s dng.
Di y l v d s a ra kch c chnh xc ca cc kiu d liu a dng trn my tnh ca bn.
#include <iostream>
using namespace std;

int main()
{
cout << "Size of char : " << sizeof(char) << endl;
cout << "Size of int : " << sizeof(int) << endl;
cout << "Size of short int : " << sizeof(short int) << endl;
cout << "Size of long int : " << sizeof(long int) << endl;
cout << "Size of float : " << sizeof(float) << endl;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 22

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Size of double : " << sizeof(double) << endl;


cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;
return 0;
}

V d ny s dng endl, m chn mt k t newline sau mi dng, v ton t << c s dng


truyn nhiu gi tr ti mn hnh. Chng ti cng s dng ton t sizeof() ly kch c ca cc
kiu d liu a dng.
Khi code trn c bin dch v thc thi, n cho kt qu sau (kt qu c th a dng ty thuc vo
compiler v my tnh bn ang s dng).
Size of char : 1
Size of int : 4
Size of short int : 2
Size of long int : 4
Size of float : 4
Size of double : 8
Size of wchar_t : 4

Khai bo typedef trong C++


Bn c th to mt tn mi cho mt kiu d liu ang tn ti bi s dng typedef trong C++. C
php n gin sau nh ngha mt kiu d liu mi bi s dng typedef:
typedef type newname;

V d sau ni cho compiler rng feet l tn khc ca int:


typedef int feet;

By gi, khai bo sau l hon ton hp l v s to mt bin integer gi l distance:


feet distance;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 23

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Kiu lit k enum trong C++


Kiu lit k enum khai bo mt tn kiu ty v mt tp hp ca 0 hoc nhiu Identifier (nh
danh) m c th c s dng nh l cc gi tr ca kiu . Mi Enumerator l mt constant c
kiu l kiu lit k (enumeration).
to mt Enumeration, bn s dng t kha enum trong C++. Form chung ca kiu lit k enum
l:
enum enum-name { list of names } var-list;

Ti y, enum-name l tn kiu lit k. Danh sch tn c phn bit bi du phy.


V d, code sau nh ngha mt bn lit k mu gi l color v bin c l kiu ca color. Cui cng, c
c gn gi tr blue.
enum color { red, green, blue } c;
c = blue;

Theo mc nh, gi tr ca name u tin l 0, name th hai l 1 v name th 3 l 2, . Nhng bn


c th cung cp cho mt name mt gi tr c th bng vic thm mt Initializer (gi tr khi to). V
d, trong enumeration sau, green s c gi tr l 5:
enum color { red, green=5, blue };

y, blue s c gi tr l 6 bi v mi name s c gi tr ln hn ca name trc l 1.

Kiu bin trong C++


Mt bin cung cp ni lu gi c t tn chng ta c th thao tc. Mi bin trong C++ c mt
kiu c th, m quyt nh: kch c v cch b tr b nh ca bin; dy gi tr c th c lu gi
bn trong b nh ; v tp hp hot ng c th c p dng cho bin .
Tn bin c th gm cc k t, cc k s, du gch di. N phi bt u bi hoc mt k t hoc
mt du gch di. Cc k t ch hoa v ch thng l khc nhau bi C++ l ngn ng phn bit
kiu ch.
Di y l cc kiu bin c bn trong C++ c gii thiu trong chng trc:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 24

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Kiu

Miu t

bool

Lu gi gi tr true hoc false

char

L mt kiu integer, kch c 1 byte

int

Kch c t nhin nht ca integer ca my tnh

float

Gi tr single floating-point

double

Gi tr double floating-point

void

Khng tr v gi tr no

wchar_t

Kiu wide character

C++ cng cho php nh ngha cc kiu bin khc, s c gii thch trong cc chng ti,
l: Enumeration, Pointer, Array, Reference, Data structure, v Class.
Tip theo l cch nh ngha, khai bo v s dng cc kiu bin a dng:

nh ngha bin trong C++


nh ngha bin trong C++ ngha l ni cho compiler ni v lng b nh cn to lu gi bin
. Mt nh ngha bin xc nh mt kiu d liu, v cha danh sch ca mt hoc nhiu bin c
kiu , nh sau:
type variable_list;

y, type phi l mt kiu d liu hp l trong C++, gm char, w_char, int, float, double, bool
hoc bt k i tng no m ngi dng t nh ngha, v variable_list c th cha mt hoc
nhiu tn Identifier (nh danh) phn bit nhau bi du phy. Sau y l mt s khai bo hp l
trong C++:
int

i, j, k;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 25

http://vietjack.com/cplusplus/index.jsp
char

c, ch;

float

f, salary;

Copyright vietjack.com

double d;

Dng int i, j, k; va khai bo v nh ngha cc bin i, j, k, m ch dn compiler to cc bin vi


tn l i, j, k ca kiu int.
Cc bin c th c khi to (c gn gi tr ban u) trong cc khai bo. Initializer (phn khi
to) gm mt k hiu bng c theo sau bi mt Constant Expression (biu thc hng s), nh
sau:
type variable_name = value;

V d:
extern int d = 3, f = 5;

// declaration of d and f.

int d = 3, f = 5;

// definition and initializing d and f.

byte z = 22;

// definition and initializes z.

char x = 'x';

// the variable x has the value 'x'.

Vi nh ngha m khng c phn khi to: cc bin c khi to vi NULL (tt c byte c gi tr
0); gi tr khi to ca tt c bin khc khng c nh ngha.

Khai bo bin trong C++


Khai bo bin trong C++ chc chn vi compiler rng c mt bin ang tn ti vi kiu v tn
cho, m compiler tip tc trnh bin dch m khng cn bit y chi tit v bin . Mt khai
bo bin ch c ngha ti thi gian bin dch, compiler cn khai bo bin thc s ti thi im kt
ni chng trnh.
Khai bo bin l hu ch khi bn ang s dng nhiu file, v bn nh ngha bin ca bn mt
trong cc file m s c sn ti thi im kt ni chng trnh. Bn s s dng t kha extern
khai bo mt bin ti bt k u. Mc d, bn c th khai bo mt bin nhiu ln trong chng
trnh C++, nhng n c th ch c nh ngha mt ln trong mt file, mt hm, hoc mt khi
code.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 26

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

V d
Trong v d sau, mt bin c khai bo ti phn u chng trnh, nhng n c nh
ngha bn trong hm main.
#include <iostream>
using namespace std;

// Variable declaration:
extern int a, b;
extern int c;
extern float f;

int main ()
{
// Variable definition:
int a, b;
int c;
float f;

// actual initialization
a = 10;
b = 20;
c = a + b;

cout << c << endl ;

f = 70.0/3.0;
cout << f << endl ;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 27

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

30
23.3333

Ging khi nim p dng trn khai bo hm, bn cung cp tn hm ti thi im khai bo v nh
ngha thc s ca hm c th c cung cp bt c u. V d:
// function declaration
int func();

int main()
{
// function call
int i = func();
}

// function definition
int func()
{
return 0;
}

Lvalue v Rvalue trong C++


C hai loi Expression trong C++:

lvalue : y l expression lin quan ti mt v tr vng nh. Bt k lvalue c th xut hin


bn tri hoc bn phi ca mt php gn.

rvalue : Khi nim ny lin quan ti mt gi tr d liu m c lu gi ti mt s a ch


trong vng nh. Mt rvalue l mt expression m khng th c mt gi tr c gn ti n,
ngha l: rvalue c th xut hin bn phi nhng khng th xut hin bn tri ca mt php
gn.

Cc bin l lvalue c th xut hin bn tri ca php gn. Cc Numeric literal (hng s) l rvalue
khng th c gn v khng th xut hin bn tri ca php gn. Di y l mt lnh hp l
trong C++:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 28

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

int g = 20;

Nhng lnh sau l khng hp l v s cho mt compile-time error (li ti thi im bin dch):
10 = 20;

Phm vi bin trong C++


Mt scope (phm vi) l mt khu vc ca chng trnh ni bin hot ng, v ni chung c th c 3
khu vc m bin c th c khai bo:

Bn trong mt hm hoc mt khi, c gi l bin cc b (local).

Trong nh ngha ca cc tham s hm, c gi l cc tham s chnh thc (formal).

Bn ngoi ca tt c hm, c gi l bin ton cc (global).

Chng ta s hc hm v cc tham s ca hm l g trong chng ti. Di y chng ti s gii


thch khi nim v bin cc b v bin ton cc.

Bin cc b trong C++


Cc bin c khai bo bn trong mt hm hoc khi l cc bin cc b (local). Chng ch c th
c s dng bi cc lnh bn trong hm hoc khi code . Cc bin cc b khng c bit
bn ngoi hm (tc l ch c s dng bn trong hm hoc khi code ). Di y l v d
s dng cc bin cc b:
#include <iostream>
using namespace std;

int main ()
{
// Local variable declaration:
int a, b;
int c;

// actual initialization
a = 10;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 29

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

b = 20;
c = a + b;

cout << c;

return 0;
}

Bin ton cc trong C++


Bin ton cc (global) trong C++ c nh ngha bn ngoi cc hm, thng phn u chng
trnh. Cc bin ton cc gi gi tr ca n trong sut vng i chng trnh ca bn.
Mt bin ton cc c th c truy cp bi bt k hm no. Tc l, mt bin ton cc l c sn
cho bn s dng trong ton b chng trnh sau khi khai bo n. Di y l v d s dng
bin ton cc v bin ni b trong C++:
#include <iostream>
using namespace std;

// Global variable declaration:


int g;

int main ()
{
// Local variable declaration:
int a, b;

// actual initialization
a = 10;
b = 20;
g = a + b;

cout << g;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 30

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

return 0;
}

Mt chng trnh c th c cc bin ton cc v bin cc b cng tn vi nhau, nhng trong mt


hm th gi tr ca bin cc b s c u tin. V d:
#include <iostream>
using namespace std;

// Global variable declaration:


int g = 20;

int main ()
{
// Local variable declaration:
int g = 10;

cout << g;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


10

Khi to bin cc b v bin ton cc trong C++


Khi mt bin cc b c nh ngha, n khng c khi to bi h thng, chnh bn phi khi
to n. Cc bin ton cc c khi to t ng bi h thng khi bn nh ngha chng, nh sau:
Kiu d liu

Initializer (Gi tr khi to)

int

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 31

http://vietjack.com/cplusplus/index.jsp
char

'\0'

float

double

pointer

NULL

Copyright vietjack.com

Khi to bin mt cch chnh xc l mt s thc hnh tt, nu khng, i khi chng trnh s cho
kt qu khng mong i.

Hng (Constant/Literal) trong C++


Constant lin quan ti cc gi tr c nh m chng trnh khng th thay i v chng c gi
l literals.
Constant l mt kiu d liu thay th cho Literal, cn Literal th hin chnh n. Trong v d: const PI
= 3.14 th Constant y l PI, cn Literal l 3.14.
Constant c th l bt k kiu d liu c bn no trong C++, v c th c phn chia thnh gi tr
hng s nguyn, hng s thc, hng k t, hng chui v Boolean literal (tm dch: hng logic).
Ngoi ra, constant c i x ging nh cc bin thng thng, ngoi tr vic gi tr ca chng
l khng th thay i sau khi nh ngha.

Hng s nguyn trong C++


Hng s nguyn c th l decimal (c s 10), octal (c s 8) hay hexadecimal (c s 16). Gi tr
c tin t (prefix) l 0 cho octal, l 0x hay 0X cho hexadecimal v khng c g cho decimal.
Mt hng s nguyn cng c cc hu t (suffix) U hay L th hin kiu unsigned hay long. Hu t c
th l ch hoa hoc ch thng v c th trong bt k th t no.
V d v cc hng s nguyn:
212

// Legal

215u

// Legal

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 32

http://vietjack.com/cplusplus/index.jsp
0xFeeL

// Legal

078

// Illegal: 8 is not an octal digit

032UU

// Illegal: cannot repeat a suffix

Copyright vietjack.com

Di y l cc kiu hng s nguyn a dng:


85

// decimal

0213

// octal

0x4b

// hexadecimal

30

// int

30u

// unsigned int

30l

// long

30ul

// unsigned long

Hng s thc trong C++


Mt hng s thc bao gm phn nguyn (integer part), du chm thp phn (decimal point), phn
l (fraction part) v phn m (exponent part). Chng ta c th biu din hng s thc theo dng
decimal hay dng m.
Khi th hin dng decimal phi bao gm du chm thp phn, phn m hoc c hai. Khi th hin
dng m phi gm phn nguyn, phn l hoc c hai. Dng m i km vi k t E hoc e.
Xt cc v d sau:
3.14159

// Legal

314159E-5L

// Legal

510E

// Illegal: incomplete exponent

210f

// Illegal: no decimal or exponent

.e55

// Illegal: missing integer or fraction

Boolean literal trong C++


C hai kiu Boolean literal v chng l mt phn ca cc t kha C++:

Gi tr true

V gi tr false

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 33

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Bn khng nn ng nht gi tr true vi 1 v gi tr false vi 0.

Hng k t trong C++


Cc hng k t trong C++ m u v kt thc bi du nhy n. Nu hng k t bt u vi L (v
d Lx) th n l kiu wchar_t. Nu khng th, n l hng k t kiu char, v d nh x.
Hng k t c th l mt k t (nh X), mt escape sequence (nh \t) hay mt k t m rng (nh
\u02c0).
Mt s k t trong C++ khi c ng trc bi du \ th chng s mang mt ngha c bit nh
bt u dng mi \n hay to mt tab \t. Chng c bit nh l escape sequence (dy thot).
Bng di y th hin mt s m escape sequence ph bin:
Escape sequence

ngha

\\

K t \

\'

K t '

\"

K t "

\?

K t ?

\a

Alert hoc bell

\b

Backspace

\f

Form feed

\n

Newline

\r

Carriage return

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 34

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

\t

tab ngang

\v

tab dc

\ooo

S h c s 8 ca mt ti 3 k s

\xhh . . .

S h c s 16 ca mt hoc nhiu k s

Di y l v d minh ha mt s k t escape sequence:


#include <iostream>
using namespace std;

int main()
{
cout << "Hello\tWorld\n\n";
return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Hello

World

Hng chui trong C++


Hng chui cha trong du nhy kp, v d abc. Mt chui s cha cc k t tng t hng k t,
gm cc k t thun, escape sequence, v cc k t m rng.
C th ngt mt dng di thnh nhiu dng bi s dng hng chui v phn bit chng bi s
dng khong trng (whitespace).
Xt v d mt hng chui trong C++ th hin theo 3 cch khc nhau:
"hello, dear"

"hello, \

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 35

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

dear"

"hello, " "d" "ear"

nh ngha hng trong C++


C hai cch nh ngha hng trong C++ l:

S dng b tin x l #define.

S dng t kha const.

S dng b tin x l #define trong C++


Di y l c php s dng tin x l #define nh ngha mt constant trong C++:
#define identifier value

V d sau gii thch c php trn:


#include <iostream>
using namespace std;

#define LENGTH 10
#define WIDTH

#define NEWLINE '\n'

int main()
{

int area;

area = LENGTH * WIDTH;


cout << area;
cout << NEWLINE;
return 0;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 36

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n cho kt qu sau:


50

S dng t kha const trong C++


Bn c th s dng tin t const nh ngha hng trong C++ vi mt kiu c th, nh sau:
const type variable = value;

V d sau gii thch chi tit c php trn:


#include <iostream>
using namespace std;

int main()
{
const int

LENGTH = 10;

const int

WIDTH

= 5;

const char NEWLINE = '\n';


int area;

area = LENGTH * WIDTH;


cout << area;
cout << NEWLINE;
return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


50

Ghi ch: N l bc thc hnh tt cho bn khi nh ngha cc hng kiu ch hoa trong C++.

Modifier trong C++


http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 37

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

C++ cho php cc kiu d liu char, int v double c cc Modifier t trc chng. Mt Modifier
c s dng thng bo ngha ca kiu c s, gip cho n tng s chnh xc hn vi s cn
thit ca cc tnh hung a dng.
Di y l cc Modifier trong C++:

signed

unsigned

long

short

Cc Modifier l: signed, unsigned, long, v short c th c p dng cho kiu integer. Ngoi
ra, signed v unsigned c th c p dng cho kiu char, v long c th p dng cho kiu
double.
Cc Modifier l signed v unsigned cng c th c s dng nh l tin t cho cc Modifier
l long hoc short modifiers. V d: unsigned long int.
C++ cho php kiu khai bo tt khai bo cc unsigned, short, or long integer. Bn c th ch
n gin s dng t unsigned, short, hoc long, m khng cn int. V d sau minh ha hai khai
bo l hp l trong C++ khai bo cc bin unsigned integer:
unsigned x;
unsigned int y;

phn bit s khc nhau gia hai Modifier l signed integer v unsigned integer c thng dch
bi C++, bn nn chy chng trnh sau:
#include <iostream>
using namespace std;

/* This program shows the difference between


* signed and unsigned integers.
*/
int main()
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 38

http://vietjack.com/cplusplus/index.jsp
short int i;

// a signed short integer

short unsigned int j;

// an unsigned short integer

Copyright vietjack.com

j = 50000;

i = j;
cout << i << " " << j;

return 0;
}

N s cho kt qu:
-15536 50000

Qualifier trong C++


Qualifier cung cp thng tin b sung v cc bin theo sau n.
Qualifier

ngha

const

i tng ca kiu const khng th b thay i bi chng trnh trong khi thc thi

volatile

Modifier ny ni cho compiler rng gi tr ca bin c th c thay i mt cch


khng r rng (khng bo trc) bi chng trnh.

restrict

Mt con tr c t l restrict th c ngha l i tng n tr n c th c


truy cp. Restrict c thm vo trong chun C99.

Lp lu tr (Storage Class) trong C++


Lp lu tr (Storage Class) nh ngha phm vi v vng i ca bin v/hoc cc hm bn trong
mt chng trnh C++. Chng thng ng trc kiu d liu m chng tc ng. Di y l cc
lp lu tr c th c s dng trong C++:

auto

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 39

http://vietjack.com/cplusplus/index.jsp

register

static

extern

mutable

Copyright vietjack.com

Lp lu tr auto trong C++


Lp lu tr auto trong C++ l lp lu tr mc nh cho tt c bin cc b trong C++:
{
int mount;
auto int month;
}

V d trn nh ngha hai bin vi cng lp lu tr, auto ch c th c s dng bn trong cc


hn, v d: cho cc bin ni b.

Lp lu tr register trong C++


Lp lu tr register trong C++ c s dng nh ngha cc bin cc b m nn c lu gi
trong mt thanh ghi thay v RAM. Ngha l, bin c kch c ti a bng vi kch c thanh ghi
(thng l 1 t) v khng th c ton t mt ngi '&' c p dng ti n (v khng c a ch b
nh).
{
register int

miles;

Lp lu tr register nn ch c dng cho cc bin yu cu truy cp nhanh nh cc bin m


(counters). Cng cn ch rng, mt bin nh ngha vi register khng c ngha l bin c
lu tr trong thanh ghi. Tc l n c th c lu tr trong thanh ghi ph thuc vo phn cng v
gii hn thc thi.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 40

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Lp lu tr static trong C++


Lp lu tr static trong C++ ni vi compiler gi mt bin cc b tn ti trong ton b thi gian
sng ca chng trnh thay v to v hy bin mi ln n vo v ra khi phm vi bin. V vy, cc
bin c static cho php n duy tr gi tr gia cc ln gi hm.
Lp lu tr static cng c th c p dng cho cc bin ton cc (global). Khi p dng cho bin
ton cc, n ni vi trnh bin dch rng, phm vi ca bin ton cc b gii hn trong tp tin m n
c khai bo.
Trong C++, khi static c s dng trn thnh vin d liu ca lp, n gy ra: ch c mt bn sao
ca thnh vin c chia s bi tt c i tng trong lp ca n.
#include <iostream>

// Function declaration
void func(void);

static int count = 10; /* Global variable */

main()
{
while(count--)
{
func();
}
return 0;
}
// Function definition
void func( void )
{
static int i = 5; // local static variable
i++;
std::cout << "i is " << i ;
std::cout << " and count is " << count << std::endl;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 41

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n cho kt qu sau:


i is 6 and count is 9
i is 7 and count is 8
i is 8 and count is 7
i is 9 and count is 6
i is 10 and count is 5
i is 11 and count is 4
i is 12 and count is 3
i is 13 and count is 2
i is 14 and count is 1
i is 15 and count is 0

Lp lu tr extern trong C++


Lp lu tr extern trong C++ c dng cung cp mt tham chiu ca mt bin ton cc c
nhn thy bi TT C cc file chng trnh. Khi bn s dng extern, bin khng th c khi
to, khi n tr ti tn bin ti mt v tr lp lu tr m c nh ngha trc .
Khi bn c nhiu file v bn nh ngha mt bin hay hm ton cc trong mt file v cng mun
dng n trong cc file khc, th extern c dng trong file khc cung cp tham chiu ca bin
hay hm c nh ngha. Cn nh rng, extern dng khai bo mt bin hay hm ton cc
trong file khc.
Lp lu tr extern c dng ph bin khi c hai hoc nhiu file chia s cng bin hay hm ton
cc. Xem v d vi hai file sau:
File u tin: main.cpp
#include <iostream>

int count ;
extern void write_extern();

main()

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 42

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

{
count = 5;
write_extern();
}

File th hai: support.cpp


#include <iostream>

extern int count;

void write_extern(void)
{
std::cout << "Count is " << count << std::endl;
}

y, t kha extern ang c s dng khai bo count trong file khc. By gi bin dch hai
file ny nh sau:
$g++ main.cpp support.cpp -o write

N s to chng trnh write c th thc thi, bn th thc thi write v kim tra kt qu nh sau:
$./write
5

Lp lu tr mutable trong C++


Lp lu tr mutable trong C++ ch p dng cho cc i tng class, s c bn lun trong
chng sau. N cho php mt thnh vin ca mt i tng override (ghi ). l, mt thnh
vin l mutable c th c sa i bi mt hm thnh vin const.

Ton t trong C++


Mt ton t l mt biu tng, m ni cho compiler thc hin cc thao tc ton hc v logic c th.
C++ cung cp nhiu ton t c sn, l:

Ton t s hc

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 43

http://vietjack.com/cplusplus/index.jsp

Ton t quan h

Ton t logic

Ton t so snh bit

Ton t gn

Ton t hn hp

Copyright vietjack.com

Ton t s hc trong C++


Bng di lit k cc ton t s hc c h tr bi ngn ng C++:
Gi s bin A gi gi tr 10, bin B gi 20 th:
V d
Ton
t

Miu t

V d

Cng hai ton hng

A + B kt qu l 30

Tr ton hng th hai t ton hng u

A - B kt qu l -10

Nhn hai ton hng

A * B kt qu l 200

Php chia

B / A kt qu l 2

Php ly s d

B % A kt qu l 0

++

Ton t lng gia (++), tng gi tr ton


hng thm mt n v

A++ kt qu l 11

--

Ton t lng gim (--), gim gi tr


ton hng i mt n v

A-- kt qu l 9

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 44

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Ton t quan h trong C++


Bng di y lit k cc ton t quan h c h tr bi ngn ng C++:
Gi s bin A gi gi tr 10, bin B gi 20 th:
V d
Ton
t

Miu t

V d

==

Kim tra nu 2 ton hng bng nhau hay


khng. Nu bng th iu kin l true.

(A == B) l khng ng

!=

Kim tra 2 ton hng c gi tr khc nhau


hay khng. Nu khng bng th iu kin
l true.

(A != B) l true

>

Kim tra nu ton hng bn tri c gi tr


ln hn ton hng bn phi hay khng.
Nu ln hn th iu kin l true.

(A > B) l khng ng

<

Kim tra nu ton hng bn tri nh hn


ton hng bn phi hay khng. Nu nh
hn th l true.

(A < B) l true

>=

Kim tra nu ton hng bn tri c gi tr


ln hn hoc bng gi tr ca ton hng
bn phi hay khng. Nu ng l true.

(A >= B) l khng ng

<=

Kim tra nu ton hng bn tri c gi tr


nh hn hoc bng ton hng bn phi
hay khng. Nu ng l true.

(A <= B) l true

Ton t logic trong C++


Bng di y ch r tt c cc ton t logic c h tr bi ngn ng C.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 45

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Gi s bin A c gi tr 1 v bin B c gi tr 0:
V d
Ton
t

Miu t

V
d

&&

c gi l ton t logic AND (v). Nu c hai ton t u c gi tr khc 0


th iu kin tr ln true.

(A
&&
B) l
false.

||

c gi l ton t logic OR (hoc). Nu mt trong hai ton t khc 0, th


iu kin l true.

(A ||
B) l
true.

c gi l ton t NOT (ph nh). S dng o ngc li trng thi


logic ca ton hng . Nu iu kin ton hng l true th ph nh n s l
false.

!(A
&&
B) l
true.

Ton t so snh bit trong C++


Ton t so snh bit lm vic trn n v bit, tnh ton biu thc so snh tng bit. Bng di y v
&, |, v ^ nh sau:
p

p&q

p|q

p^q

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 46

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Gi s nu A = 60; v B = 13; th by gi trong nh dng nh phn chng s l nh sau:


A = 0011 1100
B = 0000 1101
----------------A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
Cc ton t so snh bit c h tr bi ngn ng C++ c lit k trong bng di y. Gi s ta
c bin A c gi tri 60 v bin B c gi tr 13, ta c:
V d
Ton
t

Miu t

V d

&

Ton t AND (v) nh phn sao chp mt bit ti kt qu nu n tn ti trong


c hai ton hng.

(A &
B) s
cho
kt
qu
l 12,
tc l
0000
1100

Ton t OR (hoc) nh phn sao chp mt bit ti kt qu nu n tn ti trong


mt hoc hai ton hng.

(A |
B) s
cho
kt
qu
l 61,
tc l

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 47

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com
0011
1101

Ton t XOR nh phn sao chp bit m n ch tn ti trong mt ton hng m


khng phi c hai.

(A ^
B) s
cho
kt
qu
l 49,
tc l
0011
0001

Ton t o bit (o bit 1 thnh bit 0 v ngc li).

(~A )
s
cho
kt
qu
l 61,
tc l
1100
0011.

<<

Ton t dch tri. Gi tr ton hng tri c dch chuyn sang tri bi s cc
bit c xc nh bi ton hng bn phi.

A <<
2 s
cho
kt
qu
240,
tc l
1111
0000
(dch
sang
tri
hai
bit)

>>

Ton t dch phi. Gi tr ton hng tri c dch chuyn sang phi bi s

A >>
2 s

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 48

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cc bit c xc nh bi ton hng bn phi.

cho
kt
qu
l 15,
tc l
0000
1111
(dch
sang
phi
hai
bit)

Ton t gn trong C++


Di y l nhng ton t gn c h tr bi ngn ng C++:
V d
Ton
t

Miu t

V d

Ton t gn n gin. Gn gi tr ton hng bn phi cho ton hng tri.

C=A
+ B s
gn
gi tr
ca A
+B
vo
trong
C

+=

Thm gi tr ton hng phi ti ton hng tri v gn gi tr cho ton


hng tri.

C +=
A
tng
ng
vi C
=C+
A

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 49

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

-=

Tr i gi tr ton hng phi t ton hng tri v gn gi tr ny cho ton


hng tri.

C -= A
tng
ng
vi C
=CA

*=

Nhn gi tr ton hng phi vi ton hng tri v gn gi tr ny cho ton


hng tri.

C *= A
tng
ng
vi C
=C*
A

/=

Chia ton hng tri cho ton hng phi v gn gi tr ny cho ton hng tri.

C /= A
tng
ng
vi C
=C/
A

%=

Ly phn d ca php chia ton hng tri cho ton hng phi v gn cho
ton hng tri.

C %=
A
tng
ng
vi C
=C%
A

<<=

Dch tri ton hng tri sang s v tr l gi tr ton hng phi.

C <<=
2
tng
ng
vi C
=C
<< 2

>>=

Dch phi ton hng tri sang s v tr l gi tr ton hng phi.

C >>=
2
tng

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 50

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com
ng
vi C
=C
>> 2

&=

Php AND bit

C &=
2
tng
ng
vi C
=C&
2

^=

Php OR loi tr bit

C ^= 2
tng
ng
vi C
=C^
2

|=

Php OR bit.

C |= 2
tng
ng
vi C
=C|2

Cc ton t hn hp trong C++


Di y l mt s ton t hn hp quan trng c h tr bi ngn ng C++.
Ton t

Miu t

sizeof

Ton t sizeof trong C++ tr v kch c ca mt bin. V d:


sizeof(a), vi a l integer, s tr v 4

iu kin ? X : Y

Ton t iu kin trong C++. Nu Condition l true ? th n tr


v gi tr X : nu khng th tr v Y

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 51

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Ton t Comma trong C++ lm cho mt dy hot ng c


thc hin. Gi tr ca ton biu thc comma l gi tr ca biu
thc cui cng trong danh sch c phn bit bi du phy

. (dot) v -> (arrow)

Ton t thnh vin trong C++ c s dng tham chiu cc


phn t n ca cc lp, cc cu trc, v union

Cast

Ton t p kiu (Casting) trong C++ bin i mt kiu d liu


thnh kiu khc. V d: int(2.2000) s tr v 2

&

Ton t con tr & trong C++ tr v a ch ca mt bin. V du:


&a; s tr v a ch thc s ca bin ny

Ton t con tr * trong C++ l tr ti mt bin. V d: *var s


tr ti mt bin var

Th t u tin ton t trong C++


Th t u tin ton t trong C++ xc nh cch biu thc c tnh ton. V d, ton t nhn c
quyn u tin hn ton t cng, v n c thc hin trc.
V d, x = 7 + 3 * 2; y, x c gn gi tr 13, ch khng phi 20 bi v ton t * c quyn u
tin cao hn ton t +, v th u tin n thc hin php nhn 3 * 2 v sau thm vi 7.
Bng di y lit k th t u tin ca cc ton t. Cc ton t vi quyn u tin cao nht xut
hin trn cng ca bng, v cc ton t c quyn u tin thp nht th bn di cng ca bng.
Trong mt biu thc, cc ton t c quyn u tin cao nht c tnh ton u tin.
V d
Loi

Ton t

Th t u tin

Postfix

() [] -> . ++ - -

Tri sang phi

Unary

+ - ! ~ ++ - - (type)* & sizeof

Phi sang tri

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 52

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Tnh nhn

*/%

Tri sang phi

Tnh cng

+-

Tri sang phi

Dch chuyn

<< >>

Tri sang phi

Quan h

< <= > >=

Tri sang phi

Cn bng

== !=

Tri sang phi

Php AND bit

&

Tri sang phi

Php XOR bit

Tri sang phi

Php OR bit

Tri sang phi

Php AND logic

&&

Tri sang phi

Php OR logic

||

Tri sang phi

iu kin

?:

Phi sang tri

Gn

= += -= *= /= %=>>= <<= &= ^= |=

Phi sang tri

Du phy

Tri sang phi

Vng lp trong C++


C mt tnh hung m bn cn phi thc hin mt on code mt vi ln. Nhn chung, cc cu
lnh c thc hin mt cch tun t. Cu lnh u tin ca hm c thc hin trc, sau
n cu th 2 v tip tc.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 53

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Ngn ng lp trnh cung cp cho chng ta nhiu cu trc iu khin v cho php bn thc hin
nhng phn phc tp.
Vng lp cho php thc hin mt lnh v mt nhm lnh nhiu ln , di y l dng tng qut:

C++ h tr nhng lnh iu khin sau y. Click chut vo link xem chi tit.
Vng lp

Miu t

Vng lp while trong

Lp li mt hoc mt nhm cc lnh trong khi iu kin cho l


ng. N kim tra iu kin trc khi thc hin thn vng lp.

C++

Vng lp for trong C++

Thc thi mt dy cc lnh nhiu ln v tm tt on code m


qun l bin vng lp.

Vng

Ging lnh While, ngoi tr im l n kim tra iu kin


cui thn vng lp.

lp

do...while

trong C++

Lng vng lp trong

Bn c th s dng mt hoc nhiu vng lp trong cc vng lp


while, for hoc do..while khc.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 54

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

C++

Cc lnh iu khin vng lp trong C++


Cc lnh iu khin vng lp thay i s thc thi lnh t dy thng thng ca n. Khi s thc thi
lnh ri khi mt phm vi, tt c cc i tng t ng m c to ra trong phm vi b hy.
C++ h tr cc lnh iu khin vng lp sau y. Click vo cc ng link sau bit thm chi
tit.
Lnh iu khin

Miu t

Lnh break trong C++

Kt thc vng lp hoc lnh switch v chuyn sang thc thi


vng lp hoc lnh switch ngay sau n.

Lnh

Khi gp lnh ny th chng trnh s b qua cc cu lnh di


n (trong cng mt cu lnh lp) thc hin vng lp mi.

continue

trong

C++

Lnh goto trong C++

Chuyn ti lnh c gn. Mc d vy, n c khuyn rng


khng nn s dng lnh goto trong chng trnh ca bn.

Vng lp v hn trong C++


Mt vng lp l vng lp v hn khi mt iu kin khng bao gi false. Vng lp for thng c
s dng cho mc ch ny. Khi bn ba biu thc iu kin trong vng lp for trng th bn s
to ra mt vng lp v hn.
#include <iostream>
using namespace std;

int main ()
{

for( ; ; )
{
printf("This loop will run forever.\n");

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 55

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

return 0;
}

Khi biu thc iu kin vng mt, n c gi s l lun ng. Bn c th c mt biu thc khi
to v biu thc lng gia, nhng cc lp trnh vin C++ thng s dng for(;;) biu th mt
vng lp v hn.
Ghi ch: Bn c th dng (kt thc) mt vng lp v hn bi nhn Ctrl + C.

iu khin lung trong C++


Cc cu trc iu khin lung yu cu lp trnh vin xc nh mt hoc nhiu iu kin c
nh gi v kim tra bi chng trnh, cng vi cc lnh c thc hin nu iu kin c xc
nh l ng, hoc cc lnh khc c thc hin nu iu kin xc nh l sai.
Di y l mu chung ca mt cu trc iu khin lung hay gp trong ngn ng lp trnh.

Di y lit k cc lnh iu khin lung c cung cp bi C++. Bn click vo link thy chi
tit.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 56

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Lnh

Miu t

Lnh if trong C++

Mt lnh if bao gm mt biu thc logic theo sau bi mt


hoc nhiu lnh khc.

Lnh if...else trong C++

Mt lnh if c th theo sau bi mt lnh else (ty : c hoc


khng), m c th c thc hin khi biu thc logic c gi
tr false.

Lnh switch trong C++

Mt lnh switch cho php kim tra iu kin ca mt bin


trc khi thc thi cc lnh.

Lng cc lnh if trong C++

Bn c th s dng lnh if hoc else if bn trong lnh if


hoc else if khc.

Lng cc lnh switch trong

Bn c th s dng mt lnh switch bn trong mt lnh


switch khc.

C++

Ton t iu kin ? : trong C++


Chng ta bn v Ton t iu kin ? : trong chng trc m c th c dng thay th
cho lnh if...else. N c mu chung nh sau:
Exp1 ? Exp2 : Exp3;

Trong Exp1, Exp2 v Exp3 l cc biu thc. Ch vic s dng v t ca du hai chm.
Gi tr ca biu thc Exp1 trc du ? c gi tr true, Exp2 c thc hin, v gi tr ca n l gi
tr ca biu thc. Nu Exp1 l false th Exp3 c thc hin v gi tr ca n l gi tr ca biu
thc.

Hm trong C++
Mt hm l mt nhm cc lnh i cng nhau thc hin mt nhim v. Mi chng trnh C++ c
t nht mt hm l hm main(), v tt c hu ht cc chng trnh bnh thng u nh ngha
thm cc hm.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 57

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Bn c th chia on code ca bn thnh nhng hm ring bit. Cch bn chia on code ca bn


thnh cc hm khc nhau ph thuc vo bn, nhng theo tnh logic, mt hm thng c mt
nhim v nht nh.
Mt s khai bo hm thng bo vi b bin dch v tn ca hm, kiu tr v v tham s. Mt nh
ngha hm cung cp phn thn ca mt hm.
Cc th vin tiu chun ca ngn ng C++ cung cp rt nhiu hm c sn chng trnh ca
bn c th gi. V d, hm strcat() c th ni hai on chui, hm memcpy() dng copy mt
vng nh n mt vng nh khc v rt nhiu hm khc na.
Mt hm c bit n vi cc tn khc nhau nh mt phng thc, mt tuyn ph hoc mt th
tc.

nh ngha mt hm trong C++


Mu chung ca nh ngha hm trong Ngn ng C++ nh sau:
Kieu_tra_ve Ten_ham( Danh sach tham so )
{
Than ham
}

Mt nh ngha hm trong ngn ng C++ bao gm u hm v mt thn hm. Di y l cc


phn ca mt hm:

Kiu tr v: Mt hm c th tr v mt gi tr. Kieu_tra_ve l dng d liu ca gi tr m


hm tr v. Vi hm cung cp cc hot ng v khng tr v gi tr no c. l
hm void.

Tn hm: y l tn thc s ca hm. Tn hm v danh sch tham s cu to nn du


hiu hm.

Danh sch tham s: Khi hm c gi, bn phi truyn vo danh sch cc tham s. Mt
gi tr hng n mt tham s thc t. Danh sch tham s c cc kiu, th t v s lng
cc tham s ca hm. Cc tham s trong hm l ty chn, ngha l mt hm c th khng
c tham s.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 58

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Thn hm: Phn thn ca mt hm bao gm tp hp cc lnh xc nh nhng g m hm


thc hin.

V d
Sau y l m ngun cho mt hm c tn gi l max(). Hm ny c 2 tham s: num1 v num2 v
tr v gi tr ln nht gia hm s:
// function returning the max between two numbers

int max(int num1, int num2)


{
// local variable declaration
int result;

if (num1 > num2)


result = num1;
else
result = num2;

return result;
}

Khai bo hm trong C++


Mt khai bo hm thng bo cho trnh bin dch v tn hm v cch gi ca hm. Phn thn hm
c th nh ngha mt cch ri rc.
Mt khai bo hm c cc phn sau y:
return_type function_name( parameter list );

V d khi nh ngha hm max(), di y l cu khai bo hm:


int max(int num1, int num2);

Tn cc tham s khng quan trng trong vic khai bo hm, nhng kiu di y l cch khai bo
hp l:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 59

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

int max(int, int);

Mt khai bo hm c yu cu khi bn nh ngha mt hm v m ngun v khi gi mt hm t


mt file ngun khc. Trong trng hp ny, bn nn khai bo hm trc khi gi hm .

Gi hm trong C++
Trong khi to mt hm, bn nh ngha nhng g hm phi lm. s dng mt hm, bn phi gi
hm thc hin mt nhim v c th.
Khi mt chng trnh gi mt hm, phn iu khin c chuyn n hm c gi. Mt hm
c gi thc hin cc nhim v c nh ngha v tr v gi tr sau khi thc hin chng trnh.
gi hm, bn n gin cn truyn cc tham s c yu cu cng vi tn ca hm v nu hm
tr v cc gi tr, bn c th d tr cc gi tr tr v ny, v d:
#include <iostream>
using namespace std;

// function declaration
int max(int num1, int num2);

int main ()
{
// local variable declaration:
int a = 100;
int b = 200;
int ret;

// calling a function to get max value.


ret = max(a, b);

cout << "Max value is : " << ret << endl;

return 0;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 60

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

// function returning the max between two numbers


int max(int num1, int num2)
{
// local variable declaration
int result;

if (num1 > num2)


result = num1;
else
result = num2;

return result;
}

Ti gi gi tr hm max() trong hm main vo bin ret. Khi chng trnh c chy, n s in ra kt


qu sau y:
Max value is : 200

Tham s ca hm trong C++:


Mt hm s dng cc danh sch tham s, n phi khai bo cc bin v chp nhn gi tr cc bin
ny. Cc bin ny c gi l cc bin chnh thc.
Cc bin chnh thc ging cc bin cc b khc bn trong hm.
Khi bn gi hm, c 2 cch bn truyn cc gi tr vo cho hm:
Kiu gi

Gi hm bi gi tr
trong C++

Gi hm bi con tr

Miu t

Phng thc ny sao chp gi tr thc s ca tham s vo trong


tham s chnh thc ca mt hm. Trong trng hp ny, cc
thay i ca bn thn cc tham s bn trong hm khng nh
hng ti cc tham s.
Phng thc ny sao chp a ch ca tham s vo trong bin

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 61

http://vietjack.com/cplusplus/index.jsp

chnh thc. Bn trong hm ny, a ch ny c s dng truy


cp tham s thc s c s dng trong li gi hm.

trong C++

Gi

hm

Copyright vietjack.com

bi

tham

chiu trong C++

Phng thc ny sao chp a ch ca tham s vo trong tham


s chnh thc. Bn trong hm, a ch c dng truy cp
tham s thc s c s dng khi gi hm. C ngha l cc thay
i ti tham s lm tham s thay i.

Theo mc nh, C++ s dng gi bi gi tr truyn cc tham s. Nhn chung, code trong mt
hm khng th thay i cc tham s c dng gi hm v trong v d trn, khi gi hm
max() l dng phng thc tng t.

Gi tr mc nh cho cc tham s trong C++


Khi bn nh ngha mt hm, bn c th xc nh mt gi tr mc nh cho mi tham s cui cng.
Gi tr ny s c s dng nu tham s tng ng l trng bn tri khi gi hm .
Vic ny c thc hin bi s dng ton t gn v gn cc gi tr cho cc tham s trong nh
ngha hm. Nu mt gi tr cho tham s khng c truyn khi hm c gi, th gi tr mc
nh cung cp s c s dng, nhng nu mt gi tr c xc nh, th gi tr mc nh
ny b b qua v, thay vo , gi tr truyn c s dng. Bn theo di v d sau:
#include <iostream>
using namespace std;

int sum(int a, int b=20)


{
int result;

result = a + b;

return (result);
}

int main ()
{
// local variable declaration:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 62

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

int a = 100;
int b = 200;
int result;

// calling a function to add the values.


result = sum(a, b);
cout << "Total value is :" << result << endl;

// calling a function again as follows.


result = sum(a);
cout << "Total value is :" << result << endl;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Total value is :300
Total value is :120

Number trong C++


Thng thng, khi chng ta lm vic vi Number, chng ta s dng cc kiu d liu gc nh int,
short, long, float v double, . Cc kiu d liu s, v gi tr c th v dy gi tr ca chng,
c bn lun trong chng Kiu d liu trong C++.

nh ngha Number trong C++


Bn thy nh ngha cc s trong cc v d a dng cc chng trc. Di y l mt v d
tng hp nh ngha cc kiu s a dng trong C++:
#include <iostream>
using namespace std;

int main ()
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 63

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

// number definition:
short

s;

int

i;

long

l;

float

f;

double d;

// number assignments;
s = 10;
i = 1000;
l = 1000000;
f = 230.47;
d = 30949.374;

// number printing;
cout << "short

s :" << s << endl;

cout << "int

i :" << i << endl;

cout << "long

l :" << l << endl;

cout << "float

f :" << f << endl;

cout << "double d :" << d << endl;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


short

s :10

int

i :1000

long

l :1000000

float

f :230.47

double d :30949.4

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 64

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Hm ton hc trong C++


Bn cnh cc hm a dng bn c th to, C++ cng bao gm mt s hm ton hc hu ch cho
bn s dng. Nhng hm ny c sn trong cc th vin C v C++ chun, v c gi l cc
hm built-in. y l cc hm m c th c bao trong chng trnh ca bn v sau s dng.
C++ c mt tp hp hm ton hc a dng, c th c thc hin trn cc kiu s khc nhau.
Bng di lit k mt s hm ton hc c sn hu ch trong C++.
s dng cc hm ny, bn cn bao header file l <cmath>.
STT

Hm & Mc ch

double cos(double);
Hm ny tr v cosin ca mt gc (dng mt double)

double sin(double);
Hm ny tr v sin ca mt gc (dng mt double)

double tan(double);
Hm ny tr v tang ca mt gc (dng mt double)

double log(double);
Hm ny tr v logarit t nhin (ln) ca s

double pow(double, double);


Hm m vi c s l s double u tin v s m l double th hai

double hypot(double, double);


Nu bn truyn di ca hai cnh ca tam gic (ln lt l cc s double), n s tr
v di cnh huyn

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 65

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

double sqrt(double);

Tr v cn bc hai ca s double

int abs(int);

Tr v tr tuyt i ca int

double fabs(double);

Tr v tr tuyt i ca bt k s double no

double floor(double);

10

Tm s integer m nh hn hoc bng tham s truyn cho n


V d sau minh ha mt s hm ton hc trong C++:
#include <iostream>
#include <cmath>
using namespace std;

int main ()
{
// number definition:
short

s = 10;

int

i = -1000;

long

l = 100000;

float

f = 230.47;

double d = 200.374;

// mathematical operations;
cout << "sin(d) :" << sin(d) << endl;
cout << "abs(i)

:" << abs(i) << endl;

cout << "floor(d) :" << floor(d) << endl;


cout << "sqrt(f) :" << sqrt(f) << endl;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 66

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "pow( d, 2) :" << pow(d, 2) << endl;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


sign(d) :-0.634939
abs(i)

:1000

floor(d) :200
sqrt(f) :15.1812
pow( d, 2 ) :40149.7

S ngu nhin (Random Number) trong C++


Trong mt s trng hp, bn mun to mt s ngu nhin (random number). C hai hm c th
gip bn thc hin vic ny. Hm u tin l rand() c nh ngha trong th vin <cstdlib>: s
ch tr v mt s ngu nhin gi, m c th khng thay i qua cc ln chy chng trnh. gii
quyt im bt thng ny, chng ta s s dng hm srand() trong th vin <ctime>.
V d sau s to vi s ngu nhin trong C++. V d c s dng hm time() ly s giy trn
System time ca bn. Gi tr tr v t time l qua scrand, bn lu l s ngu nhin c to ra
trc li gi rand.
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main ()
{
int i,j;

// set the seed


srand( (unsigned)time( NULL ) );

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 67

http://vietjack.com/cplusplus/index.jsp

/* generate 10

Copyright vietjack.com

random numbers. */

for( i = 0; i < 10; i++ )


{
// generate actual random number
j= rand();
cout <<" Random Number : " << j << endl;
}

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Random Number : 1748144778
Random Number : 630873888
Random Number : 2134540646
Random Number : 219404170
Random Number : 902129458
Random Number : 920445370
Random Number : 1319072661
Random Number : 257938873
Random Number : 1256201101
Random Number : 580322989

Mng (Array) trong C++


Ngn ng lp trnh C++ cung cp cu trc d liu gi l mng, c lu tr trong mt tp hp cc
d liu cng kiu vi di c nh. Mt mng c s dng lu tr tp hp d liu, nhng n
rt hu dng nu bn ngh v mt mng cc bin vi cng mt kiu.
Thay v khai bo bin mt cch ri rc, nh bin number0, number1, v number99, bn c th
khai bo mt mng cc gi tr nh numbers[0], numbers[1] v numbers[99] biu din cc gi
tr ring bit. Mt thnh vin c th ca mng c th c truy cp qua index (ch s).

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 68

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Tt c mng u bao gm cc v tr nh lin k nhau. a ch thp nht tng ng vi thnh vin


u tin v a ch cao nht tng ng vi thnh vin cui cng ca mng.

Khai bo mng trong C++


khai bo mt mng trong ngn ng C++, bn xc nh kiu ca bin v s lng cc phn t
c yu cu bi bin nh sau:
Kieu Ten_mang [ Kich_co_mang ];

y l mng mt chiu. Kich_co_mang phi l mt s nguyn ln hn 0 v Kieu phi hp l


trong ngn ng C++. V d, khai bo mt mng 10 phn t gi l balance vi kiu double, s dng
cu lnh sau y:
double balance[10];

Khi to mng trong C++


Bn c th khi to mng trong C++ hoc tng phn t mt hoc s dng mt cu lnh nh di
y:
double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};

S lng cc gi tr trong du ngoc kp {} khng c ln hn s lng phn t khai bo trong


du ngoc vung [].
Nu bn b st kch c mng th mng ln gi cc gi tr c khi to: Bn s to chnh
xc mt chui c gi tr ging ht chui bn trn bng cch gn tng phn t mt. Di y l mt
v d khi gn gi tr cho mt phn t ca mng:
double balance[] = {1000.0, 2.0, 3.4, 17.0, 50.0};

Bn c th to ra cng mt mng ging nh lm trong v d trc.


balance[4] = 50.0;

Cu lnh bn trn gn gi tr th 5 ca mng gi tr 50.0. Tt c cc mng u c ch s (index)


u tin bng 0, y c gi l ch s c bn v phn t cui cng ca mng c ch s bng
ln ca mng tr i 1. Di y l cch biu din hnh ha cho chui khai bo bn trn thng qua
ch s:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 69

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Truy cp cc phn t mng trong C++


Mt mng c truy cp bi cch nh ch s trong tn ca mng. Di y l mt cch truy cp
mt gi tr ca mng:
double salary = balance[9];

Cu lnh trn ly phn t th 10 ca mng v gn gi tr ny cho bin salary. Di y l mt v


d v vic s dng vi tt c m t bn trn:
#include <iostream>
using namespace std;

#include <iomanip>
using std::setw;

int main ()
{
int n[ 10 ]; // n is an array of 10 integers

// initialize elements of array n to 0


for ( int i = 0; i < 10; i++ )
{
n[ i ] = i + 100; // set element at location i to i + 100
}
cout << "Element" << setw( 13 ) << "Value" << endl;

// output each array element's value


for ( int j = 0; j < 10; j++ )
{
cout << setw( 7 )<< j << setw( 13 ) << n[ j ] << endl;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 70

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

return 0;
}

Chng trnh ny s dng hm setw() trong C++ nh dng output. Khi on code ny c
bin dch v thc hin, kt qu sau y s c in ra:
Element

Value

100

101

102

103

104

105

106

107

108

109

Chi tit v mng trong C++


Mng l mt phn rt quan trng trong ngn ng C++. Di y l nhng nh ngha quan trng
lin quan n mt mng c th m c trnh by r rng hn cho cc lp trnh vin C++:
Khi nim

Miu t

Mng a chiu trong C++

C++ h tr cc mng a chiu. Mu n gin nht ca


mng ny l mng hai chiu

Con tr ti mt mng trong C++

Truyn mng ti hm nh l
tham s trong C++

Bn c th tr ti phn t u tin ca mng mt cch


n gin ch bi xc nh tn mng , ch khng phi
mt ch s
Bn c th truyn ti hm mt im tr ch ti mt
mng bi xc nh tn mng ch khng phi l mt ch
s

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 71

http://vietjack.com/cplusplus/index.jsp

Tr v mng t hm trong C++

Copyright vietjack.com

C++ cho php mt hm c th tr v mt mng

Chui (String) trong C++


C++ cung cp hai kiu biu din chui nh sau:

Chui theo phong cch ca ngn ng C (C-style),

Lp Chui (String) c gii thiu trong C++ chun.

Chui theo phong cch C


Dng chui ny bt ngun t ngn ng C v tip tc c h tr trong C++. Chui trong ngn ng
lp trnh C thc cht l mng mt chiu ca cc k t m kt thc bi mt k tnull \0.
Phn khai bo v khi to di y to ra mt chui bao gm mt t Hello. gi cc gi tr null
ti cui ca mng, c ca mng cc k t bao gm mt chui phi nhiu hn s lng cc k t
trong t kha Hello.
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Nu bn theo quy tc khi to cc chui, bn c th vit lnh nh sau:


char greeting[] = "Hello";

Di y l phn biu din nh cho on chui trn trong ngn ng C/C++:

Thc t, bn khng t k t null ti v tr cui cng ca bin hng s. B bin dch C t ng thm
\0 ti v tr cui cng ca chui khi n khi to chui. Cng th v d in ra chui sau y:
#include <iostream>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 72

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

using namespace std;

int main ()
{
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

cout << "Greeting message: ";


cout << greeting << endl;

return 0;
}

Khi on code trn c bin dch v thc hin, kt qu in ra s nh sau:


Greeting message: Hello

Ngn ng C++ h tr nhiu hm a dng thao tc cc chui kt thc l null:


STT

Hm & Mc ch

strcpy(s1, s2);
Sao chp chui s2 cho chui s1.

strcat(s1, s2);
Ni chui s2 vo cui chui s1.

strlen(s1);
Tr v di ca chui s1.

strcmp(s1, s2);
Tr v 0 nu s1 v s2 l nh nhau; nh hn 0 nu s1<s2; ln hn 0 nu s1>s2.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 73

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

strchr(s1, ch);

Tr v con tr ti v tr u tin ca ch trong s1.

strstr(s1, s2);

Tr v con tr ti v tr u tin ca chui s2 trong chui s1.


Di y l v d cho vic s dng mt vi hm bn trn:
#include <iostream>
#include <cstring>

using namespace std;

int main ()
{
char str1[10] = "Hello";
char str2[10] = "World";
char str3[10];
int

len ;

// copy str1 into str3


strcpy( str3, str1);
cout << "strcpy( str3, str1) : " << str3 << endl;

// concatenates str1 and str2


strcat( str1, str2);
cout << "strcat( str1, str2): " << str1 << endl;

// total lenghth of str1 after concatenation


len = strlen(str1);
cout << "strlen(str1) : " << len << endl;

return 0;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 74

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Khi on code trn c bin dch v thc hin, kt qu di y s c in ra:


strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10

Lp String trong C++


Th vin chun C++ cung cp mt kiu lp String m h tr tt c hot ng lin quan ti chui
cp trn, v b sung thm nhiu tnh nng na. Chng ta s hc lp ny trong Th vin
chun C++ (C++ Standard Library), nhng lc ny, chng ta xem xt v d sau:
Lc ny, c th bn khng hiu v d ny, bi v chng ta cha bn lun v Lp v i
tng trong C++. V th, bn quan st v ghi nh chng ti khi bn hiu cc khi nim v
Hng i tng c trnh by chng sau .
#include <iostream>
#include <string>

using namespace std;

int main ()
{
string str1 = "Hello";
string str2 = "World";
string str3;
int

len ;

// copy str1 into str3


str3 = str1;
cout << "str3 : " << str3 << endl;

// concatenates str1 and str2


str3 = str1 + str2;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 75

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "str1 + str2 : " << str3 << endl;

// total lenghth of str3 after concatenation


len = str3.size();
cout << "str3.size() :

" << len << endl;

return 0;
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


str3 : Hello
str1 + str2 : HelloWorld
str3.size() :

10

Con tr trong C++


Con tr - Pointer trong ngn ng C++ rt d hc v th v. Mt vi tc v trong ngn ng C++ c
thc hin d dng hn nh con tr, v nhng tc v khc tr nn linh hot hn, nh trong vic cp
pht b nh, khng th thc hin m khng dng con tr. Do rt cn thit phi nm vng con
tr khi tr thnh mt lp trnh vin C++ hon thin. By gi hy bt u bng nhng bc n
gin nht.
Nh bn bit, mi bin trong mt vng nh nht nh v mi vng nh ny c a ch c n c
nh ngha d dng trong vic truy cp s dng ton t (&) tng ng vi a ch ca n trong
b nh. Xem xt v d di y, s in ra a ch ca bin c nh ngha:
#include <iostream>

using namespace std;

int main ()
{
int

var1;

char var2[10];

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 76

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Address of var1 variable: ";


cout << &var1 << endl;

cout << "Address of var2 variable: ";


cout << &var2 << endl;

return 0;
}

Khi cc on code trn c bin dch v thc hin, n s in ra kt qu sau y:


Address of var1 variable: 0xbfebd5c0
Address of var2 variable: 0xbfebd5b6

Con tr l g?
Mt con tr l mt bin m trong gi tr ca n l a ch ca bin khc. V d nh a ch ca
vng nh. Ging nh cc bin v hng s, bn phi khai bo con tr trc khi bn c th s dng
n lu tr bt k a ch ca bin no. Dng tng qut ca vic khai bo con tr nh sau:
type *var-name;

y, type l kiu d liu c bn con tr, n l kiu hp l trong ngn ng C v var-namel tn


gi tr ca con tr. Phn k t * s dng trong khai bo con tr ging nh vic bn s dng cho
php nhn. Mc d vy, trong khai bo ny, k t * c thit k s dng cc bin ca con tr.
Di y l mt s cch khai bo hp l ca con tr:
int

*ip;

// pointer to an integer

double *dp;

// pointer to a double

float

*fp;

// pointer to a float

char

*ch

// pointer to character

Kiu d liu thc s ca gi tr ca tt c cc con tr, c th l integer, float, character, hoc kiu
khc, l ging nh, mt s long hexa biu din mt a ch b nh. im khc nhau duy nht ca
cc con tr ca cc kiu d liu khc nhau l kiu d liu ca bin hoc hng s m con tr ch ti.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 77

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Cch s dng con tr trong C++


C mt vi php ton quan trng, s gip chng ta lm vic vi con tr mt cch thng xuyn: a)
chng ta nh ngha bin con tr, b) gn a ch ca bin n mt con tr v c) cui cng truy cp
cc gi tr bin a ch trong bin con tr. iu ny c thc hin bi ton t * tr v gi tr cc
cc bin cha trong a ch c xc nh bi ton t ny. Di y l cc s dng nhng php
ton trn:
#include <iostream>

using namespace std;

int main ()
{
int

var = 20;

// actual variable declaration.

int

*ip;

// pointer variable

ip = &var;

// store address of var in pointer variable

cout << "Value of var variable: ";


cout << var << endl;

// print the address stored in ip pointer variable


cout << "Address stored in ip variable: ";
cout << ip << endl;

// access the value at the address available in pointer


cout << "Value of *ip variable: ";
cout << *ip << endl;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 78

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Value of var variable: 20


Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20

Chi tit v con tr trong C++


Con tr c nhiu khi nim nhng cng kh d hc v rt quan trng trong lp trnh ngn ng
C++. Di y l nhng khi nim quan trng v con tr trong C++, c trnh by r rng cho
bn, khi bn click vo link tng ng.
Khi nim

Miu t

Con tr Null trong C++

C++ h tr con tr null, l mt constant vi gi tr l 0


c nh ngha trong mt s th vin chun

Con tr s hc trong C++

C 4 ton t i s m c th c s dng trn cc


con tr l: ++, --, +, -

Con tr v mng trong C++

C mi lin h g gia con tr v mng. Bn kim tra


ngay.

Mng con tr trong C++

Con tr ti con tr trong C++

Truyn con tr ti hm trong


C++

Tr v con tr t hm trong C++

Bn c th nh ngha cc mng gi cc con tr.

C++ cho php bn tr ti mt con tr ...

Truyn mt tham s bi tham chiu hoc a ch: c hai


cho cc tham s c truyn kh nng c th c
thay i trong hm gi bi hm c gi.

C++ cho php mt hm tr v mt con tr ti bin cc


b, bin tnh v cng nh b nh c cp pht ng.

Tham chiu trong C++


Mt bin tham chiu l mt alias, l tn khc cho mt bin ang tn ti. Khi mt tham chiu
c khi to vi mt bin, th: hoc tn bin hoc tn tham chiu c th c s dng tham
chiu ti bin .

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 79

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Tham chiu v con tr trong C++


S dng tham chiu c th thng gy bi ri cho bn nh vi con tr, tuy nhin, c 3 im khc
nhau gia tham chiu v con tr trong C++:

Bn khng th c tham chiu NULL. Bn lun lun phi gi s rng mt tham chiu c
kt ni vi mt phn ca kho lu tr.

Khi mt tham chiu c khi to cho mt i tng, n khng th b thay i tham


chiu ti i tng khc. Cc con tr c th c tr ti i tng khc ti bt k thi
im no.

Mt tham chiu phi c khi to khi n c to. Cc con tr c th c to ti bt k


thi im no.

To tham chiu trong C++


Bn coi mt tn bin nh l mt label c nh km vi v tr bin trong b nh. Sau , bn c
th ngh v tham chiu nh l label th hai c nh km vi v tr b nh . V th, bn c th
truy cp ni dung ca bin thng qua: hoc tn bin ban u hoc tham chiu. Gi s chng ta c
v d sau:
int

i = 17;

Bn c th khai bo cc bin tham chiu cho i nh sau:


int&

r = i;

c & trong cc khai bo ny l Tham chiu. V th, trong khai bo u tin, r l tham chiu
integer c khi to cho i v trong tham chiu th hai, s l tham chiu double c khi to cho
d. V d sau s dng cc tham chiu trong C++:
#include <iostream>

using namespace std;

int main ()
{
// declare simple variables

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 80

http://vietjack.com/cplusplus/index.jsp
int

Copyright vietjack.com

i;

double d;

// declare reference variables


int&

r = i;

double& s = d;

i = 5;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r

<< endl;

d = 11.7;
cout << "Value of d : " << d << endl;
cout << "Value of d reference : " << s

<< endl;

return 0;
}

Khi code trn c bin dch v thc thi, n s cho kt qu sau:


Value of i : 5
Value of i reference : 5
Value of d : 11.7
Value of d reference : 11.7

Tham chiu trong C++ thng c s dng cho danh sch cc tham s hm v hm tr v cc
gi tr. Sau y l hai khi nim quan trng lin quan ti tham chiu trong C++, bn s thy chi tit
khi click vo link:
Khi nim

Miu t

Truyn tham s bi tham chiu

C++ h tr truyn cc tham chiu nh l cc tham s


hm m an ton hn so vi cc tham s

trong C++

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 81

http://vietjack.com/cplusplus/index.jsp

Tr v gi tr bi tham chiu

Copyright vietjack.com

Bn c th tr v tham chiu t mt hm C++ ging


nh bt k kiu d liu khc c th c tr v

trong C++

Date v Time trong C++


Th vin chun C++ (C++ Standard Library) khng cung cp mt kiu Date thch ng. C++ k
tha cu trc v hm thao tc Date v Time t C. truy cp cc hm v cu trc lin quan ti
Date v Time, bn s cn khai bo <ctime> trong chng trnh C++ ca bn.
C 4 kiu lin quan ti thi gian: clock_t, time_t, size_t, v tm. Trong cc kiu clock_t, size_t
v time_t c th biu din System date v time dng int.
Kiu cu trc tm gi Date v Time trong mu mt cu trc C c cc phn t sau:
struct tm {
int tm_sec;

// seconds of minutes from 0 to 61

int tm_min;

// minutes of hour from 0 to 59

int tm_hour;

// hours of day from 0 to 24

int tm_mday;

// day of month from 1 to 31

int tm_mon;

// month of year from 0 to 11

int tm_year;

// year since 1900

int tm_wday;

// days since sunday

int tm_yday;

// days since January 1st

int tm_isdst; // hours of daylight savings time


}

Bng di lit k cc hm quan trng trong khi bn lm vic vi Date v Time trong C hoc C++.
Tt v hm ny l mt phn ca th vin C v C++ chun v bn c th kim tra chi tit bi s
dng tham chiu ti Th vin chun C++ c cung cp di y:
STT

Hm & Mc ch

time_t time(time_t *time);


Tr v thi gian theo lch ca h thng, l s giy tri qua t 1/1/1970. Nu h

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 82

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

thng khng c thi gian, n tr v -1

char *ctime(const time_t *time);


Hm ny tr v mt con tr ti mt chui ca mu: day month year
hours:minutes:seconds year\n\0.

struct tm *localtime(const time_t *time);


struct tm *localtime(const time_t *time); Hm ny tr v mt con tr ti cu trctm biu
din local time

clock_t clock(void);
Hm ny tr v mt gi tr m xp x vi lng thi gian ca chng trnh ang gi
ang chy. Tr v -1 nu thi gian l khng c sn

char * asctime ( const struct tm * time );


Tr v mt con tr ti mt chui m cha thng tin c lu gi trong cu trc c
tr ti bi time c bin i thnh mu: day month date hours:minutes:seconds
year\n\0

struct tm *gmtime(const time_t *time);


Tr v mt con tr ti time trong mu cu trc tm. Thi gian c biu din dng
Coordinated Universal Time (UTC), v bn cht l Greenwich Mean Time (GMT).

time_t mktime(struct tm *time);


Tr v thi gian theo lch tng ng vi thi gian c tm thy trong cu trc
c tr ti bi time

double difftime ( time_t time2, time_t time1 );


Hm ny tnh ton s khc nhau v s giy ca time1 v time2

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 83

http://vietjack.com/cplusplus/index.jsp
9

Copyright vietjack.com

size_t strftime();
Hm ny c th c s dng nh dng Date v Time trong mt nh dng c th

Date v Time hin ti trong C++


Gi s bn mun ly date v time hin ti ca h thng: hoc local time hoc dng UTC. V d sau
thc hin cng vic trn:
#include <iostream>
#include <ctime>

using namespace std;

int main( )
{
// current date/time based on current system
time_t now = time(0);

// convert now to string form


char* dt = ctime(&now);

cout << "The local date and time is: " << dt << endl;

// convert now to tm struct for UTC


tm *gmtm = gmtime(&now);
dt = asctime(gmtm);
cout << "The UTC date and time is:"<< dt << endl;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


The local date and time is: Sat Jan

The UTC date and time is:Sun Jan

8 20:07:41 2011

9 03:07:41 2011

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 84

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

nh dng Time bi s dng cu trc tm trong C++


Cu trc tm l rt quan trng trong khi lm vic vi Date v Time trong C v C++. Cu trc ny gi
Date v Time trong mu ca mt cu trc C c cp trn. Hu ht cc hm lin quan ti
thi gian u s dng cu trc tm. V d sau s dng cc hm a dng lin quan ti Date v Time
v cu trc tm:
Trong khi s dng cu trc trong chng ny, mnh gi s bn hiu c bn v cu trc trong C
v cch truy cp cc thnh vin ca cu trc bi s dng ton t ->.
#include <iostream>
#include <ctime>

using namespace std;

int main( )
{
// current date/time based on current system
time_t now = time(0);

cout << "Number of sec since January 1,1970:" << now << endl;

tm *ltm = localtime(&now);

// print various components of tm structure.


cout << "Year: "<< 1900 + ltm->tm_year << endl;
cout << "Month: "<< 1 + ltm->tm_mon<< endl;
cout << "Day: "<<

ltm->tm_mday << endl;

cout << "Time: "<< 1 + ltm->tm_hour << ":";


cout << 1 + ltm->tm_min << ":";
cout << 1 + ltm->tm_sec << endl;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Number of sec since January 1, 1970:1294548238

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 85

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Year: 2011
Month: 1
Day: 8
Time: 22: 44:59

Input/Output trong C++


Th vin chun C++ cung cp nhiu kh nng input/output v s c bn lun trong cc
chng sau. Trong chng ny, chng ta tho lun rt c bn v ph bin nht v hot ng I/O
cn thit cho lp trnh C++.
I/O trong C++ din ra trong cc Stream (lung), m l dy cc byte. Nu cc byte chy t mt thit
b, nh bn phm, disk drive, hoc mt kt ni mng , ti b nh chnh, n c gi l hot
ng input. Nu cc byte chy t b nh chnh ti cc thit b, nh mn hnh hin th, my in, dist
drive, hoc mt kt ni mng , n c gi l hot ng output.

Header file cho I/O trong C++


Bng di lit k cc header file quan trng cho cc chng trnh C++:
Header File

Miu t

<iostream>

File ny nh ngha cc i tng cin, cout, cerr v clog, tng ng vi


Standard Input Stream (Lung u vo chun), Standard Output Stream
(Lung u ra chun), Un-buffered Standard Error Stream (Lung li
chun khng c m) v Buffered Standard Error Stream (Lung li
chun c m)

<iomanip>

File ny khai bo cc dch v hu ch thc hin hot ng I/O c


nh dng vi cc b thao tc lung c tham s ha
nh setw vsetprecision.

<fstream>

File ny khai bo cc dch v x l file c kim sot bi ngi dng.


Chng ta s tho lun chi tit v n trong chng File v Stream trong
C++

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 86

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Standard Output Stream (cout) trong C++


i tng tin nh ngha cout l mt minh ha ca lp ostream. i tng cout c xem nh
c kt ni ti thit b u ra chun, thng l mn hnh. i tng cout c s dng kt hp
vi ton t chn lung (insertion operator), c vit l <<, nh v d di y:
#include <iostream>

using namespace std;

int main( )
{
char str[] = "Hello C++";

cout << "Value of str is : " << str << endl;


}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Value of str is : Hello C++

B bin dch C++ cng quyt nh kiu d liu ca bin c output v chn ton t chn lung
thch hp hin th gi tr. Ton t << c np chng (overload) ti d liu u ra ca kiu
integer, float, double, string, v gi tr con tr c sn.
Ton t chn lung << c th c s dng nhiu hn mt ln trong mt lnh v endl c s
dng them mt dng mi ti cui dng .

Standard Input Stream (cin) trong C++


i tng tin nh ngha cin l mt minh ha ca lp isrtream. i tng cin c xem nh nh
km vi thit b u vo chun, m thng l bn phm. i tng cin c s dng kt hp vi
ton t trch lung (extraction operator), vit l >>, nh trong v d sau:
#include <iostream>

using namespace std;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 87

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

int main( )
{
char name[50];

cout << "Please enter your name: ";


cin >> name;
cout << "Your name is: " << name << endl;

Khi code trn c bin dch v thc thi, n s nhc bn nhp mt tn. Bn nhp mt gi tr v sau
enter thy kt qu ging nh sau:
Please enter your name: cplusplus
Your name is: cplusplus

B bin dch C++ cng quyt nh kiu d liu ca gi tr nhp v chn ton t trch lung thch
hp trch gi tr v lu gi n trong cc bin cung cp.
Ton t trch lung >> c th c s dng nhiu hn mt ln trong mt lnh. yu cu nhiu
hn mt d liu chun, bn c th s dng:
cin >> name >> age;

N tng ng vi hai lnh sau:


cin >> name;
cin >> age;

Standard Error Stream (cerr) trong C++


i tng tin nh ngha cerr l mt minh ha ca lp ostream. i tng cerr c xem nh
nh km vi thit b li chun, m cng l mn hnh hin th nhng i tng cerr l Un-buffered
(khng c m) v mi s chn lung ti cerr lm u ra ca n xut hin tc th.
i tng cerr trong C++ cng c s dng kt hp vi ton t chn lung, nh trong v d sau:
#include <iostream>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 88

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

using namespace std;

int main( )
{
char str[] = "Unable to read....";

cerr << "Error message : " << str << endl;


}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Error message : Unable to read....

Standard Log Stream (clog) trong C++


i tng tin nh ngha clog l mt minh ha ca lp ostream. i tng clog c xem nh
nh km vi thit b li chun, cng l mn hnh hin th nhng i tng clog l c m.
Ngha l, mi s chn lung ti clog lm u ra ca n c gi trong mt b m (buffer) ti khi
b m b in y hoc ti khi b m b flush (chuyn t m ra a).
i tng clog trong C++ cng c s dng kt hp vi ton t chn lung, nh v d sau:
#include <iostream>

using namespace std;

int main( )
{
char str[] = "Unable to read....";

clog << "Error message : " << str << endl;


}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Error message : Unable to read....

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 89

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Bn s khng th thy bt k im khc bit no gia cout, cerr v clog vi nhng v d nh ny,
nhng trong khi vit v thc thi cc chng trnh ln, th s khc nhau ny tr nn r rng hn. V
th, n l bi thc hnh tt cho bn hin th cc thng bo li (error message) bi s dng
lung cerr v trong khi hin th thng bo log khc, th clog nn c s dng.

Cu trc d liu trong C++


Cc mng trong C/C++ cho php bn nh ngha mt vi loi bin c th gi gi tr ca mt vi
thnh vin cng kiu d liu. Nhng structure - cu trc l mt loi d liu khc trong ngn ng
lp trnh C/C++, cho php bn kt hp cc d liu khc kiu nhau.
Cu trc c s dng biu din mt bn ghi. Gi s bn mun lu tr gi tr ca mt quyn
sch trong th vin ca bn. Bn c th lu tr cc thuc tnh ca sch sau y:

Title

Author

Subject

Book ID

nh ngha mt cu trc trong C++


nh ngha cu trc, bn phi s dng cu lnh struct. Cu lnh struct nh ngha mt kiu d
liu mi, vi hn mt thnh vin trong chng trnh ca bn. Dng tng qut ca cu lnh struct
nh sau y:
struct [structure tag]
{
member definition;
member definition;
...
member definition;
} [one or more structure variables];

y, structure tag c th ty v mt thnh vin nh ngha l cc bin thng nh int i, float j


hoc mt nh ngha bin khc . Ti phn cui cng ca nh ngha cu trc, trc du chm
phy, bn c th xc nh mt hoc nhiu bin cu trc (ty chn). Di y l cch khai bo bin
cu trc Book:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 90

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

struct Books
{
char

title[50];

char

author[50];

char

subject[100];

int

book_id;

}book;

Truy cp cc thnh vin ca cu trc trong C++


truy cp bt k thnh vin no ca cu trc, bn s dng ton t truy cp phn t (.). Ton t
truy cp thnh vin cu trc c m ha l du chm gia tn bin cu trc v thnh vin cu
trc m bn mun truy cp. Bn s s dng t kha struct nh ngha cc bin ca kiu cu
trc. Di y l v d cho cch s dng cu trc trong C++:
#include <iostream>
#include <cstring>

using namespace std;

struct Books
{
char

title[50];

char

author[50];

char

subject[100];

int

book_id;

};

int main( )
{
struct Books Book1;

// Declare Book1 of type Book

struct Books Book2;

// Declare Book2 of type Book

// book 1 specification
strcpy( Book1.title, "Learn C++ Programming");

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 91

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

strcpy( Book1.author, "Chand Miyan");


strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;

// book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;

// Print Book1 info


cout << "Book 1 title : " << Book1.title <<endl;
cout << "Book 1 author : " << Book1.author <<endl;
cout << "Book 1 subject : " << Book1.subject <<endl;
cout << "Book 1 id : " << Book1.book_id <<endl;

// Print Book2 info


cout << "Book 2 title : " << Book2.title <<endl;
cout << "Book 2 author : " << Book2.author <<endl;
cout << "Book 2 subject : " << Book2.subject <<endl;
cout << "Book 2 id : " << Book2.book_id <<endl;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Book 1 title : Learn C++ Programming
Book 1 author : Chand Miyan
Book 1 subject : C++ Programming
Book 1 id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Yakit Singha
Book 2 subject : Telecom

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 92

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Book 2 id : 6495700

Cu trc nh l tham s hm trong C++


Bn c th truyn mt cu trc nh mt tham s ca hm theo cch kh ging nh khi bn truyn
bt k bin hay con tr khc. Bn s truy cp bin cu trc theo cch tng t nh bn truy cp
trong v d trn:
#include <iostream>
#include <cstring>

using namespace std;


void printBook( struct Books book );

struct Books
{
char

title[50];

char

author[50];

char

subject[100];

int

book_id;

};

int main( )
{
struct Books Book1;

// Declare Book1 of type Book

struct Books Book2;

// Declare Book2 of type Book

// book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;

// book 2 specification
strcpy( Book2.title, "Telecom Billing");

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 93

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

strcpy( Book2.author, "Yakit Singha");


strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;

// Print Book1 info


printBook( Book1 );

// Print Book2 info


printBook( Book2 );

return 0;
}
void printBook( struct Books book )
{
cout << "Book title : " << book.title <<endl;
cout << "Book author : " << book.author <<endl;
cout << "Book subject : " << book.subject <<endl;
cout << "Book id : " << book.book_id <<endl;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700

Con tr ti cu trc trong C++


Bn c th nh ngha con tr cu trc theo cch tng t bn nh ngha con tr ti bt k bin
no khc nh sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 94

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

struct Books *struct_pointer;

By gi bn c th lu a ch ca bin cu trc trong bin con tr c nh ngha trn. tm


a ch ca mt bin cu trc, t ton t & trc tn cu trc nh sau:
struct_pointer = &Book1;

truy cp vo thnh vin ca mt structure s dng con tr ti structure , bn phi s dng


ton t -> nh sau:
struct_pointer->title;

By gi chng ta vit li v d trn s dng con tr cu trc, hy vng iu ny s d dng cho bn


hiu khi nim ny:
#include <iostream>
#include <cstring>

using namespace std;


void printBook( struct Books *book );

struct Books
{
char

title[50];

char

author[50];

char

subject[100];

int

book_id;

};

int main( )
{
struct Books Book1;

// Declare Book1 of type Book

struct Books Book2;

// Declare Book2 of type Book

// Book 1 specification
strcpy( Book1.title, "Learn C++ Programming");

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 95

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

strcpy( Book1.author, "Chand Miyan");


strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;

// Book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;

// Print Book1 info, passing address of structure


printBook( &Book1 );

// Print Book1 info, passing address of structure


printBook( &Book2 );

return 0;
}
// This function accept pointer to structure as parameter.
void printBook( struct Books *book )
{
cout << "Book title : " << book->title <<endl;
cout << "Book author : " << book->author <<endl;
cout << "Book subject : " << book->subject <<endl;
cout << "Book id : " << book->book_id <<endl;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 96

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Book author : Yakit Singha


Book subject : Telecom
Book id : 6495700

T kha typedef trong C++


C mt cch d dng hn nh ngha cc cu trc hoc bn c th alias cc kiu bn to. V
d:
typedef struct
{
char

title[50];

char

author[50];

char

subject[100];

int

book_id;

}Books;

Lc ny, bn c th s dng Books mt cch trc tip nh ngha cc bin ca kiu cu


trc Books m khng s dng t kha struct. Sau y l v d:
Books Book1, Book2;

Bn c th s dng t kha typedef trong C++ cho cc dng khng phi cu trc, nh sau:
typedef long int *pint32;

pint32 x, y, z;

Vi x, y v z l tt c con tr ti long int.

Lp v i tng trong C++


Mc ch chnh ca C++ l b sung thm tnh hng i tng (object) cho Ngn ng lp trnh C
v cc Lp (class) l tnh nng trung tm ca C++ m h tr lp trnh hng i tng v thng
c gi l cc kiu ngi dng t nh ngha (user-defined).
Mt lp c s dng xc nh form ca mt i tng v n kt ni s biu din d liu v
cc phng thc thao tc cc d liu vo trong mt package gn gng. D liu v hm bn
trong mt lp c gi l cc thnh vin ca lp .

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 97

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

nh ngha Lp trong C++


Khi bn nh ngha mt lp, bn nh ngha mt blueprint cho mt kiu d liu. iu ny khng
thc s nh ngha bt k d liu no, nhng n nh ngha ngha tn lp l g, l, nhng g
mt i tng ca lp s bao gm v nhng hot ng no c th c thc hin trn mt i
tng .
Mt nh ngha lp trong C++ bt u vi t kha class, c theo sau bi tn lp v phn thn
lp, c bao quanh trong mt cp du ngoc mc. Mt nh ngha lp phi c theo sau: hoc
bi mt du chm phy hoc mt danh sch cc khai bo. V d, chng ta nh ngha kiu d liu
Box bi s dng t kha class trong C++ nh sau:
class Box
{
public:
double length;

// Length of a box

double breadth;

// Breadth of a box

double height;

// Height of a box

};

T kha public quyt nh cc thuc tnh truy cp ca cc thnh vin lp m theo sau n. Mt
thnh vin public c th c truy cp t bn ngoi lp bt c u bn trong phm vi (scope) ca
i tng lp . Bn cng c th xc nh cc thnh vin ca lp l privatehoc protected s
c bn lun trong chng ph.

nh ngha i tng trong C++


Mt lp cung cp cc blueprint cho cc i tng, v th v c bn, mt i tng c to t mt
lp. Chng ta khai bo cc i tng ca mt lp ging ng nh chng ta khai bo cc bin ca
kiu c bn. Cc lnh sau khai bo hai i tng ca lp Box:
Box Box1;

// Declare Box1 of type Box

Box Box2;

// Declare Box2 of type Box

C hai i tng Box1 v Box2 s c bn sao ca cc thnh vin d liu (Data Member) ring.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 98

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Truy cp cc thnh vin d liu trong C++


Cc thnh vin d liu public ca cc i tng ca mt lp c th c truy cp bi s dng
ton t truy cp thnh vin trc tip l du chm (.). Bn s thy r rng khi xem v d sau:
#include <iostream>

using namespace std;

class Box
{
public:
double length;

// Length of a box

double breadth;

// Breadth of a box

double height;

// Height of a box

};

int main( )
{
Box Box1;

// Declare Box1 of type Box

Box Box2;

// Declare Box2 of type Box

double volume = 0.0;

// Store the volume of a box here

// box 1 specification
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;

// box 2 specification
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// volume of box 1
volume = Box1.height * Box1.length * Box1.breadth;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 99

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Volume of Box1 : " << volume <<endl;

// volume of box 2
volume = Box2.height * Box2.length * Box2.breadth;
cout << "Volume of Box2 : " << volume <<endl;
return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Volume of Box1 : 210
Volume of Box2 : 1560

im quan trng cn nh l: cc thnh vin private v protected khng th c truy cp mt cch


trc tip bi s dng ton t truy cp thnh vin tr tip ny. Chng ta s hc cch cc thnh vin
private v protected c th c truy cp.

Chi tit v Lp & i tng trong C++


Lc ny, bn hiu kh c bn v Lp v i tng trong C++. Di y l cc khi nim kh
th v lin quan ti Lp v i tng trong C++ m bn cn quan tm. Bn click vo link xem
chi tit.
Khi nim

Hm thnh vin lp trong C++

Access Modifier cho lp trong


C++

Constructor & Destructor trong


C++

Miu t

Mt hm thnh vin ca mt lp l mt hm c nh
ngha ca n hoc prototype ca n bn trong nh
ngha lp ging nh bt k bin no khc
Mt thnh vin lp c th c nh ngha l public,
private hoc protected. Theo mc nh, cc thnh vin
s l private
Mt class constructor l mt hm c bit trong mt lp
m c gi khi mt i tng mi ca lp c
to. Mt class destructor cng l mt hm c bit m
c gi khi i tng to b hy

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 100

http://vietjack.com/cplusplus/index.jsp

Copy Constructor trong C++

Copyright vietjack.com

copy constructor l mt constructor m to mt i


tng bng vic khi to n vi mt i tng ca
cng lp , m c to trc

Hm Friend trong C++

Hm friend c cho php truy cp ti cc thnh vin


l private v protected ca mt lp

Hm Inline trong C++

Vi mt hm inline, trnh bin dch c gng m rng


code trong thn hm th ch cho mt li gi ti hm

Con tr this trong C++

Mi i tng c mt con tr this c bit, m tr ti


chnh i tng

Con tr ti lp trong C++

Thnh vin Static trong C++

Mt con tr ti mt lp c thc hin ging ht nh


cch mt con tr ti mt cu trc. Thc ra, mt lp l
mt cu trc vi cc hm trong n

C cc thnh vin d liu (data member) v cc thnh


vin hm (function member) c th c khai bo l
static

Tnh k tha trong C++


Mt trong nhng khi nim quan trng nht trong lp trnh hng i tng l Tnh k tha
(Inheritance). Tnh k tha cho php chng ta nh ngha mt lp trong iu kin mt lp khc,
m lm cho n d dng hn to v duy tr mt ng dng. iu ny cng cung cp mt c hi
ti s dng tnh nng code v thi gian thc thi nhanh hn.
Khi to mt lp, thay v vit ton b cc thnh vin d liu v cc hm thnh vin mi, lp trnh
vin c th nn k tha cc thnh vin ca mt lp ang tn ti. Lp ang tn ti ny c gi
l Base Class - lp c s, v lp mi c xem nh l Derived Class lp tha k.
tng ca tnh k tha trin khai mi quan h IS A (L Mt). V d: mammal IS-A animal, dog ISA mammal, v th dog IS-A animal v ....

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 101

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Lp c s (Base Class) v Lp tha k (Derived


Class) trong C++
Mt lp c th c k tha t hn mt lp khc, ngha l, n c th k tha d liu v hm t
nhiu lp c s. nh ngha mt lp k tha (Derived Class), chng ta s dng mt danh sch
xc nh cc lp c s. Danh sch ny lit k mt hoc nhiu lp c s v c form sau:
class derived-class: access-specifier base-class

y, access-specifier l public, protected hoc private, v base-class l tn ca mt lp


c nh ngha trc . Nu access-specifier khng c s dng, th mc nh l private.
Bn xem xt v d sau vi Shape l lp c s v Rectangle l lp k tha:
#include <iostream>

using namespace std;

// Base class
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 102

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

// Derived class
class Rectangle: public Shape
{
public:
int getArea()
{
return (width * height);
}
};

int main(void)
{
Rectangle Rect;

Rect.setWidth(5);
Rect.setHeight(7);

// Print the area of the object.


cout << "Total area: " << Rect.getArea() << endl;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Total area: 35

iu khin truy cp v Tnh k tha trong C++


Mt lp k tha c th truy cp tt c thnh vin khng phi l private ca lp c s ca n. V
th, cc thnh vin lp c s, m l hn ch truy cp ti cc hm thnh vin ca lp k tha, nn
c khai bo l private trong lp c s.
Chng ta tng kt cc kiu truy cp khc nhau, tng ng vi ai c th truy cp chng nh sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 103

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Truy cp

public

protected

private

Trong cng lp

Lp k tha

Khng

Bn ngoi lp

Khng

Khng

Mt lp k tha (Derived Class) s k tha tt c cc phng thc ca lp c s, ngoi tr:

Constructor, destructor v copy constructor ca lp c s.

Overloaded operator (ton t np chng) ca lp c s.

Hm friend ca lp c s.

Kiu k tha trong C++


Khi k tha t mt lp c s, lp c s c th c k tha thng qua kiu k tha lpublic,
protected hoc private. Kiu k tha trong C++ c xc nh bi Access-specifier c gii
thc trn.
Chng ta him khi s dng kiu k tha protected hoc private, nhng kiu k thapublic th
c s dng ph bin hn. Trong khi s dng cc kiu k tha khc sau, bn nn ghi nh cc
quy tc sau:

Kiu k tha Public: Khi k tha t mt lp c s l public, th cc thnh vinpublic ca


lp c s tr thnh cc thnh vin public ca lp k tha; v cc thnh
vin protected ca lp c s tr thnh cc thnh vin protected ca lp k tha. Mt
thnh vin l private ca lp c s l khng bao gi c th c truy cp trc tip t mt
lp k tha, nhng c th truy cp thng qua cc li gi ti cc thnh
vin public v protected ca lp c s .

Kiu k tha protected: Khi k tha t mt lp c s l protected, th cc thnh


vin public v protected ca lp c s tr thnh cc thnh vin protected ca lp k
tha

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 104

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Kiu k tha private: Khi k tha t mt lp c s l private, th cc thnh


vinpublic v protected ca lp c s tr thnh cc thnh vin private ca lp k tha

a k tha trong C++


Mt lp trong C++ c th k tha cc thnh vin t nhiu lp, v y l c php:
class derived-class: access baseA, access baseB....

Ti y, access l public, protected hoc private v s c cung cp cho mi lp c s, v


chng s c phn bit vi nhau bi du phy nh trn. Bn th v d sau:
#include <iostream>

using namespace std;

// Base class Shape


class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};

// Base class PaintCost


class PaintCost
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 105

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

public:
int getCost(int area)
{
return area * 70;
}
};

// Derived class
class Rectangle: public Shape, public PaintCost
{
public:
int getArea()
{
return (width * height);
}
};

int main(void)
{
Rectangle Rect;
int area;

Rect.setWidth(5);
Rect.setHeight(7);

area = Rect.getArea();

// Print the area of the object.


cout << "Total area: " << Rect.getArea() << endl;

// Print the total cost of painting


cout << "Total paint cost: $" << Rect.getCost(area) << endl;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 106

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Total area: 35
Total paint cost: $2450

Np chng ton t v Np chng hm


trong C++
C++ cho php bn xc nh nhiu hn mt nh ngha cho mt tn hm hoc mt ton t trong
cng phm vi (scope), c gi tng ng l Np chng hm (function overloading) v Np
chng ton t (operator overloading) trong C++.
Mt khai bo np chng l mt khai bo m c khai bo vi cng tn nh mt khai bo c
khai bo trc trong cng phm vi, ngoi tr rng: c hai khai bo c cc tham s khc nhau v
nh ngha khc nhau.
Khi bn gi mt hm np chng hoc mt ton t np chng, th compiler quyt nh nh ngha
thch hp nht s dng bng vic so snh cc kiu tham s bn s dng gi hm hoc
ton t vi cc kiu tham s c xc nh trong cc nh ngha. Tin trnh la chn hm np
chng hoc ton t np chng thch hp nht ny c gi l overload resolution - phn gii
np chng.

Np chng hm trong C++


Bn c th c nhiu nh ngha cho cng tn hm trong cng phm vi. nh ngha ca hm phi
khc ln nhau v kiu v/hoc s tham s trong danh sch tham s. Bn khng th np chng cc
khai bo hm m ch khc nhau kiu tr v.
Trong v d sau, cng mt hm print() c s dng in cc kiu d liu khc nhau:
#include <iostream>
using namespace std;

class printData
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 107

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

public:
void print(int i) {
cout << "Printing int: " << i << endl;
}

void print(double

f) {

cout << "Printing float: " << f << endl;


}

void print(char* c) {
cout << "Printing character: " << c << endl;
}
};

int main(void)
{
printData pd;

// Call print to print integer


pd.print(5);
// Call print to print float
pd.print(500.263);
// Call print to print character
pd.print("Hello C++");

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Printing int: 5
Printing float: 500.263
Printing character: Hello C++

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 108

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Np chng ton t trong C++


Bn c th nh ngha li hoc np chng hu ht cc ton t c sn trong C++. V th, mt lp
trnh vin c th s dng cc ton t vi kiu t nh ngha (user-defined).
Np chng ton t trong C++ l cc hm vi tn c bit: Tn hm l t kha operator theo sau l
k hiu ca ton t ang c nh ngha. Ging nh bt k hm khc, mt ton t np chng c
mt kiu tr v v mt danh sch tham s.
Box operator+(const Box&);

Khai bo ton t + cng hai i tng Box v tr v i tng Box cui cng. Hu ht ton t
np chng c th c nh ngha di dng: cc hm khng c thnh vin (non-member) hoc
cc hm thnh vin lp. Trong trng hp trn, chng ta nh ngha hm dng non-member ca
mt lp, th sau chng ta phi truyn hai tham s cho mi ton hng, nh sau:
Box operator+(const Box&, const Box&);

V d sau minh ha khi nim np chng ton t bi s dng mt hm thnh vin. y, mt i


tng c truyn nh l mt tham s m cc thuc tnh ca n s c truy cp bi s dng i
tng ny, i tng m s gi ton t ny c th c truy cp bi s dng ton t this, nh
sau:
#include <iostream>
using namespace std;

class Box
{
public:

double getVolume(void)
{
return length * breadth * height;
}
void setLength( double len )
{
length = len;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 109

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

void setBreadth( double bre )


{
breadth = bre;
}

void setHeight( double hei )


{
height = hei;
}
// Overload + operator to add two Box objects.
Box operator+(const Box& b)
{
Box box;
box.length = this->length + b.length;
box.breadth = this->breadth + b.breadth;
box.height = this->height + b.height;
return box;
}
private:
double length;

// Length of a box

double breadth;

// Breadth of a box

double height;

// Height of a box

};
// Main function for the program
int main( )
{
Box Box1;

// Declare Box1 of type Box

Box Box2;

// Declare Box2 of type Box

Box Box3;

// Declare Box3 of type Box

double volume = 0.0;

// Store the volume of a box here

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 110

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

// box 1 specification
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);

// box 2 specification
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);

// volume of box 1
volume = Box1.getVolume();
cout << "Volume of Box1 : " << volume <<endl;

// volume of box 2
volume = Box2.getVolume();
cout << "Volume of Box2 : " << volume <<endl;

// Add two object as follows:


Box3 = Box1 + Box2;

// volume of box 3
volume = Box3.getVolume();
cout << "Volume of Box3 : " << volume <<endl;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 111

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Ton t c th np chng v khng th np chng


trong C++
Bng di lit k danh sch cc ton t c th c np chng trong C++:
+

&

<

>

<=

>=

++

--

<<

>>

==

!=

&&

||

+=

-=

/=

%=

^=

&=

|=

*=

<<=

>>=

[]

()

->

->*

new

new []

delete

delete []

Cn y l danh sch cc ton t khng th c np chng trong C++:


::

.*

?:

V d v Np chng ton t trong C++


Di y l cc v d a dng minh ha Np chng ton t trong C++, t gip bn hiu su
hn v khi nim ny. Bn click vo link thy v d:
STT

Ton t v V d

Np chng ton t mt ngi (unary) trong C++

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 112

http://vietjack.com/cplusplus/index.jsp
2

Np chng ton t nh phn trong C++

Np chng ton t quan h trong C++

Np chng ton t Input/Output trong C++

Np chng ton t ++ v -- trong C++

Np chng ton t gn trong C++

Np chng ton t gi hm () trong C++

Np chng ton t [] trong C++

Np chng ton t truy cp thnh vin lp -> trong C++

Copyright vietjack.com

a hnh trong C++


a hnh (polymorphism) ngha l c nhiu hnh thi khc nhau. Tiu biu l, a hnh xut hin khi
c mt cu trc cp bc ca cc lp v chng l lin quan vi nhau bi tnh k tha.
a hnh trong C++ ngha l mt li gi ti mt hm thnh vin s lm cho mt hm khc c
thc thi ph thuc vo kiu ca i tng m triu hi hm .
Bn xem xt v d sau, y lp c s c k tha bi hai lp khc trong C++:
#include <iostream>
using namespace std;

class Shape {
protected:
int width, height;
public:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 113

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Shape( int a=0, int b=0)


{
width = a;
height = b;
}
int area()
{
cout << "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape{
public:
Rectangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
class Triangle: public Shape{
public:
Triangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout << "Triangle class area :" <<endl;
return (width * height / 2);
}
};
// Main function for the program
int main( )
{
Shape *shape;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 114

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Rectangle rec(10,7);
Triangle

tri(10,5);

// store the address of Rectangle


shape = &rec;
// call rectangle area.
shape->area();

// store the address of Triangle


shape = &tri;
// call triangle area.
shape->area();

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Parent class area
Parent class area

L do cho output khng chnh xc l v: li gi ca hm area() ang c thit lp mt ln bi


compiler nh phin bn c nh ngha trong lp c s . iu ny gi l static resolution (s
phn gii tnh) ca li gi hm, hoc static linkage (s lin hp tnh) li gi hm c sa
trc khi chng trnh c thc thi. i khi n cng c gi l early binding (hoc static
binding) bi v hm area() c thit lp trong khi bin dch chng trnh.
By gi, chng ta sa chng trnh trn mt cht v t trc khai bo ca area() trong lp Shape
vi t kha virtual, khi n trng nh sau:
class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 115

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

width = a;
height = b;
}
virtual int area()
{
cout << "Parent class area :" <<endl;
return 0;
}
};

Sau khi sa i, khi code ca v d trn c bin dch v thc thi, n s cho kt qu sau:
Rectangle class area
Triangle class area

Lc ny, compiler nhn vo cc ni dung ca con tr thay v kiu ca n. V th, khi a ch ca cc


i tng ca lp tri v rec c lu gi trong *shape, th hm area() tng ng c gi.
Nh bn c th thy, mi lp con c mt trin khai hm area() ring bit. y l cch chung m a
hnh trong C++ c s dng. Bn c cc lp khc nhau vi cng mt tn hm, v c th l cng
tham s, nhng trnh trin khai l khc nhau.

Hm virtual trong C++


Mt hm virtual l mt hm trong mt lp c s m c khai bo bi s dng t kha virtual
trong C++. Vic nh ngha trong mt lp c s mt hm virtual, vi phin bn khc trong mt lp
k tha, bo cho compiler rng: chng ta khng mun Static Linkage cho hm ny.
Nhng g chng ta lm l mun vic la chon hm c gi ti bt k im no cung cp
trong chng trnh l da trn kiu i tng, m vi n c gi. Hot ng ny c th gi tt
l dynamic linkage, hoc late binding trong C++.

Hm pure virtual trong C++


N l c th nu bn mun bao mt hm virtual trong mt lp c s, m n c th c ti nh
ngha trong mt lp k tha ph hp vi cc i tng ca lp , nhng l nh ngha
khng c ngha g.
Chng ta c th thay i hm virtual l area() trong lp c s thnh nh sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 116

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width = a;
height = b;
}
// pure virtual function
virtual int area() = 0;
};

=0 ni cho compiler rng hm khng c phn thn v hm virtual trn s c gi l hm pure


virtual function trong C++..

Tru tng ha d liu trong C++


Tru tng ha d liu (Data abstraction) lin quan ti vic ch cung cp thng tin cn thit ti
bn ngoi v n chi tit c s ca chng, v d: biu din thng tin cn thit trong chng trnh
m khng hin th chi tit v chng.
Tru tng ha d liu (Data abstraction) l mt k thut lp trnh m da trn s phn bit ca
Interface v Implementation (trnh trin khai).
Xem xt v d v mt chic TV, bn c th bt/tt, thay i knh, chnh m lng, v thm cc thit
b ngoi vi nh loa, VCR v DVD. Nhng bn khng bit cc chi tit ni vi ca n, l, bn khng
bit cch n nhn tn hiu qua khng kh hoc qua dy cp, cch phin dch chng v cui cng l
hin th chng trn mn hnh.
V th, c th ni rng mt chic TV phn bit r rng trnh trin khai ni vi ca n vi giao din
ngoi vi v bn c th thao tc vi interface vi cc nt ngun, iu khin m lng m khng cn
c bt k hiu bit v nhng g din ra bn trong n.
By gi, v mt ngn ng lp trnh C++, th cc lp C++ cung cp Tru tng ha d liu (Data
abstraction) mc tht tuyt vi. Chng cung cp cc phng thc public ti bn ngoi

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 117

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

thao tc vi tnh nng ca i tng v thao tc d liu i tng, v d: trng thi m khng
cn thc s bit v cch lp c trin khai ni ti.
V d, chng trnh ca bn c th to mt li gi ti hm sort() m khng cn bit v hm
thc s s dng thut ton g sp xp cc gi tr cho. Thc ra, trnh trin khai c s
(underlying implementation) ca tnh nng sp xp c th thay i ty vo th vin, v min l
Interface vn nh c th li gi hm ca bn vn tip tc lm vic.
Trong C++, chng ta s dng cc Lp nh ngha kiu d liu tru tng (abstract data types
(ADT)) ca ring chng ta. Bn c th s dng i tng cout ca lp ostream cho lung d liu
ti u ra chun nh sau:
#include <iostream>
using namespace std;

int main( )
{
cout << "Hello C++" <<endl;
return 0;
}

Ti y, bn khng cn hiu cch cout hin th vn bn trn mn hnh. Bn ch cn bit Public


Interface v Underlying Implementation ca cout l sn sng thay i.

Nhn truy cp (Access Label) trong C++


Trong C++, chng ta s dng Access Label nh ngha Abstract Interface (Giao din tru
tng) cho lp. Mt lp c th cha 0 hoc nhiu Access Label.

Cc thnh vin c nh ngha vi mt nhn public l c th truy cp cho tt c cc phn


ca chng trnh. Tru tng ha d liu ca mt kiu c nh ngha bi cc thnh vin
public ca n.

Cc thnh vin c nh ngha vi mt nhn private l khng th truy cp cho code m s


dng lp . Khu vc private n trnh trin khai ny vi code m s dng kiu .

Khng c hn ch v tn sut m mt nhn truy cp (Access Label) c th xut hin. Mi Access


Label xc nh truy cp (Access Level) ca s nh ngha thnh vin tip theo. truy cp

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 118

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

xc nh cn tn ti hiu qu ti khi gp Access Label k tip hoc gp du ngoc mc ng ca


thn lp.

Li ch ca Tru tng ha d liu trong C++


Tru tng ha d liu trong C++ mang li hai li th quan trng:

Phn ni vi hay bn trong lp c bo v trnh khi cc li do ngi dng v , m c th


gy h hng trng thi ca d liu.

Trin khai lp c th tin hnh qua thi gian p ng yu cu thay i hoc bug cc bo
co m khng yu cu thay i trong code ca ngi dng.

Bng vic nh ngha cc thnh vin d liu ch trong khu vc private ca lp, tc gi ca lp c
th t do to cc thay i trong d liu. Nu trnh trin khai thay i, th ch m ha lp l cn kim
tra bit kha cnh no em li thay i. Nu d liu l public, th khi bt k hm no m truy
cp mt cch trc tip ti cc thnh vin d liu ca php biu din c c th b ph v.

V d v Tru tng ha d liu trong C++


Trong bt k chng trnh C++ no, ni bn trin khai mt lp vi cc thnh vin l public v
private, th l mt v d ca tru tng ha d liu. Bn xem xt v d sau:
#include <iostream>
using namespace std;

class Adder{
public:
// constructor
Adder(int i = 0)
{
total = i;
}
// interface to outside world
void addNum(int number)
{
total += number;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 119

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

// interface to outside world


int getTotal()
{
return total;
};
private:
// hidden data from outside world
int total;
};
int main( )
{
Adder a;

a.addNum(10);
a.addNum(20);
a.addNum(30);

cout << "Total " << a.getTotal() <<endl;


return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Total 60

Lp trn cng hai s v tr v tng ca chng. Cc thnh vin public l addNum vgetTotal l cc
Interface ti bn ngoi v mt ngi s dng cn bit chng s dng lp . Thnh vin
private l total l ci g m ngi s dng khng cn bit n, nhng l cn thit cho lp
hot ng mt cch chnh xc.

Chin lc thit k trong C++


Tru tng ha d liu phn bit code thnh Interface v Implementation. V th, trong khi thit k
thnh phn ca bn, bn phi gi Interface c lp vi Implementation, m nu bn thay i
underlying implementation th Interface s vn cn tn ti nh c.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 120

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Trong trng hp ny, bt k chng trnh no ang s dng cc Interface ny, chng s khng b
nh hng v s cn mt s ti bin dch vi Implementation mi nht ny.

Tnh ng gi d liu trong C++


Tt c chng trnh C++ bao gm hai thnh phn nn tng l:

Cc lnh (code) chng trnh: y l phn chng trnh m thc hin cc hnh ng v
cng c gi l cc hm.

D liu chng trnh: D liu l thng tin ca chng trnh m tc ng n cc hm


chng trnh.

Tnh ng gi (Encapsulation) l mt khi nim ca lp trnh hng i tng m rng buc d


liu v cc hm m thao tc d liu , v gi chng an ton bi ngn cn s gy tr ngi v s
lm dng t bn ngoi. Tnh ng gi d liu dn n khi nim OOP quan trng l Data Hiding.
Tnh ng gi d liu - Data encapsulation l mt k thut bao ng d liu, v cc hm m s
dng chng v tru tng ha d liu l mt k thut ch trng by ti cc Interface v n
Implementation Detail (chi tit trnh trin khai) ti ngi s dng.
C++ h tr cc thuc tnh ca ng gi v n d liu thng qua vic to cc kiu t nh ngha
(user-defined), gi l classes. Chng ta hc rng mt lp c th cha cc thnh vin private,
protected v public. Theo mc nh, tt c thnh phn c nh ngha trong mt lp l private.
V d:
class Box
{
public:
double getVolume(void)
{
return length * breadth * height;
}
private:
double length;

// Length of a box

double breadth;

// Breadth of a box

double height;

// Height of a box

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 121

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

};

Cc bin length, breadth, v height l private. Ngha l chng ch c th c truy cp bi cc


thnh vin khc ca lp Box, v khng th bi bt k phn khc trong chng trnh ca bn. y
l mt cch thc hin tnh ng gi trong C++.
lm cho cc phn ca lp l public (v d: c th truy cp ti cc phn khc trong chng trnh
ca bn), bn phi khai bo chng sau t kha public. Tt c bin v hm c nh ngha sau t
kha public l c th truy cp cho tt c cc hm trong chng trnh ca bn.

V d v ng gi d liu trong C++


Trong bt k chng trnh C++ no, ni bn trin khai mt lp vi cc thnh vin l public v
private th l v d ca ng gi d liu v Tru tng ha d liu trong C++. Bn xem xt v
d sau:
#include <iostream>
using namespace std;

class Adder{
public:
// constructor
Adder(int i = 0)
{
total = i;
}
// interface to outside world
void addNum(int number)
{
total += number;
}
// interface to outside world
int getTotal()
{
return total;
};

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 122

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

private:
// hidden data from outside world
int total;
};
int main( )
{
Adder a;

a.addNum(10);
a.addNum(20);
a.addNum(30);

cout << "Total " << a.getTotal() <<endl;


return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Total 60

Lp trn cng hai s v tr v tng ca chng. Cc thnh vin public l addNum vgetTotal l cc
Interface ti bn ngoi v mt ngi s dng cn bit chng s dng lp . Thnh vin
private l total l ci g m ngi s dng khng cn bit n, nhng l cn thit cho lp
hot ng mt cch chnh xc.

Chin lc thit k trong C++


Hu ht chng ta c t nhiu kinh nghim v vic lm cho cc thnh vin lp l private theo mc
nh, tr khi chng ta thc s cn thit phi trng by chng. l mt kinh nghim v tnh ng
gi tt.
Kinh nghim ny c p dng thng xuyn nht cho cc thnh vin d liu, nhng n p dng
nh nhau cho tt c thnh vin, bao gm c cc hm virtual trong C++.

Interface trong C++ (Lp tru tng)


http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 123

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Mt Interface miu t hnh vi hoc kh nng ca mt lp trong C++ m khng k thc ti mt trnh
trin khai c th ca lp .
Interface trong C++ c trin khai bi s dng cc Lp tru tng (Abstract class) v nhng
lp tru tng ny khng nn b nhm ln vi Tru tng ha d liu, m l mt khi nim ca
vic gi Implementation Detail phn bit vi d liu c lin kt.
Mt lp c to l abstract bng vic khai bo t nht mt ln cc hm ca n l hm pure
virtual. Mt hm pure virtual c xc nh bng vic t = 0 trong khai bo ca n, nh sau:
class Box
{
public:
// pure virtual function
virtual double getVolume() = 0;
private:
double length;

// Length of a box

double breadth;

// Breadth of a box

double height;

// Height of a box

};

Mc ch ca mt Lp tru tng (thng gi tt l ABC) l cung cp mt lp c s thch hp


t cc lp khc c th k tha. Cc lp tru tng khng th c s dng thuyt minh
cc i tng v ch phc v nh l mt Interface. N lc thuyt minh mt i tng ca mt
lp tru tng trong C++ s to ra mt li bin dch (compilation error).
V th, nu mt lp ph ca mt ABC cn c thuyt minh, n phi trin khai cc hm virtual,
ngha l n h tr Interface c khai bo bi ABC. Tht bi trong vic ghi mt hm pure virtual
trong mt lp k tha, th vic n lc thuyt minh cc i tng ca lp , l mt li bin dch.
Cc lp, m c th c s dng thuyt minh i tng, c gi l Concrete Classtrong
C++.

V d v Lp tru tng trong C++


Bn xem xt v d sau: lp cha cung cp mt Interface ti lp c s trin khai mt
hmgetArea() trong C++:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 124

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

#include <iostream>

using namespace std;

// Base class
class Shape
{
public:
// pure virtual function providing interface framework.
virtual int getArea() = 0;
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};

// Derived classes
class Rectangle: public Shape
{
public:
int getArea()
{
return (width * height);
}
};
class Triangle: public Shape

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 125

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

{
public:
int getArea()
{
return (width * height)/2;
}
};

int main(void)
{
Rectangle Rect;
Triangle

Tri;

Rect.setWidth(5);
Rect.setHeight(7);
// Print the area of the object.
cout << "Total Rectangle area: " << Rect.getArea() << endl;

Tri.setWidth(5);
Tri.setHeight(7);
// Print the area of the object.
cout << "Total Triangle area: " << Tri.getArea() << endl;

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Total Rectangle area: 35
Total Triangle area: 17

Bn c th thy cch mt lp tru tng nh ngha mt Interface vi hm getArea() ny v hai lp


khc trin khai cng mt hm nhng vi thut ton khc nhau tnh ton din tch c th cho
hnh.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 126

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Chin lc thit k trong C++


Mt h thng hng i tng c th s dng mt lp c s cung cp mt Interface chung v
chun ha thch hp cho tt c cc ng dng ngoi vi. V th, thng qua k tha t lp c s tru
tng , cc lp k tha c thit lp theo cch tng t.
Cc kh nng (v d: cc hm public), c cung cp bi cc ng dng ngoi vi, c cung cp
dng cc hm pure virtual trong lp c s tru tng. Trnh trin khai ca cc hm pure virtual ny
c cung cp trong cc lp k tha tng ng vi cc kiu ng dng c th.
Cu trc ny cng cho php cc ng dng mi c thm vo h thng mt cch d dng, ngay
c sau khi h thng c nh ngha.

File v Stream trong C++


Ti by gi, chng ta s dng th vin chun iostream, cung cp cc phng
thc cinv cout c t Standard Input v vit ti Standard Output tng ng.
Chng ny s hng dn bn cch c v vit t mt file. iu ny cn mt Th vin chun C++
khc l fstream, m nh ngha 3 kiu d liu mi:
Kiu d liu

Miu t

ofstream

Kiu d liu ny biu din Output File Stream v c s dng


to cc file v vit thng tin ti cc file

ifstream

Kiu d liu ny biu din Input File Stream v c s dng


c thng tin t cc file

fstream

Kiu d liu ny ni chung biu din File Stream, v c cc kh


nng ca c ofstream v ifstream, ngha l n c th to file, vit
thng tin ti file v c thng tin t file

thc hin tin trnh x l file trong C++, bn bao cc header file l <iostream> v <fstream>
trong source file ca chng trnh C++ ca bn.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 127

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

M mt File trong C++


Mt file phi c m trc khi bn c th c thng tin t n hoc vit thng tin ti n. Hoc i
tng ofstream hoc i tng fstream c th c s dng m mt file vi mc ch vit
hoc i tng ifstream c s dng m file ch vi mc ch c.
Di y l c php chun cho hm open(), l mt thnh vin ca cc i tng fstream, ifstream
v ofstream trong C++:
void open(const char *filename, ios::openmode mode);

Ti y, tham s u tin xc nh tn v v tr ca file c m v tham s th hai ca hm


thnh vin open() nh ngha ch m file nn c m.
Ch

Miu t

ios::app

Ch Append. Tt c output ti file c ph thm vo cui


file

ios::ate

M mt file cho outpur v di chuyn iu khin read/write ti cui


ca file

ios::in

M mt file c

ios::out

M mt file vit

ios::trunc

Nu file ny tn ti, ni dung ca n s c ct (truncate)


trc khi m file

Bn c th kt hp hai hoc nhiu gi tr ny bng vic hoc chng cng vi nhau (s dng (|). V
d, nu bn mun m mt file trong ch vit v mun ct (truncate) n trong trng hp n
tn ti, bn theo c php sau:
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );

Theo cch tng t, bn c th m mt file vi mc ch c v vit nh sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 128

http://vietjack.com/cplusplus/index.jsp
fstream

Copyright vietjack.com

afile;

afile.open("file.dat", ios::out | ios::in );

ng mt File trong C++


Khi mt chng trnh C++ kt thc, n t ng ng tt c Stream, gii phng tt c b nh
cp pht v ng tt c file m. Nhng n l bi thc hnh tt cho mt lp trnh vin nn ng
tt c file m trc khi kt thc chng trnh.
Di y l c php chung cho hm close() trong C++, l mt thnh vin ca cc i tng
fstream, ifstream v ofstream trong C++:
void close();

Vit ti mt File trong C++


Trong khi lp trnh C++, bn vit thng tin ti mt file t chng trnh ca bn bi s dng ton t
chn lung l (<<), ging nh khi bn s dng ton t to thng tin u ra ti mn hnh. Ch
c mt im khc nhau l bn s dng mt i tng ofstream hocfstream trong C++ thay cho
i tng cout trong C++.

c mt File trong C++


Bn c thng tin t mt file trong chng trnh C++ ca bn bi s dng ton t trch lung l
(>>), ging nh bn s dng ton t nhp thng tin u vo t bn phm. im khc nhau l
bn s dng mt i tng ifstream hoc fstream thay v s dng i tng cin trong C++.

V d v c v Vit file trong C++


Chng trnh C++ sau m mt file trong ch c v vit. Sau khi vit thng tin c nhp vo
bi ngi s dng ti mt file l afile.dat, chng trnh c thng tin t file v to kt qu u
ra trn mn hnh:
#include <fstream>
#include <iostream>
using namespace std;

int main ()
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 129

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

char data[100];

// open a file in write mode.


ofstream outfile;
outfile.open("afile.dat");

cout << "Writing to the file" << endl;


cout << "Enter your name: ";
cin.getline(data, 100);

// write inputted data into the file.


outfile << data << endl;

cout << "Enter your age: ";


cin >> data;
cin.ignore();

// again write inputted data into the file.


outfile << data << endl;

// close the opened file.


outfile.close();

// open a file in read mode.


ifstream infile;
infile.open("afile.dat");

cout << "Reading from the file" << endl;


infile >> data;

// write the data at the screen.


cout << data << endl;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 130

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

// again read the data from the file and display it.
infile >> data;
cout << data << endl;

// close the opened file.


infile.close();

return 0;
}

Khi code trn c bin dch v thc thi, n s cho input v output nh sau:
$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9

V d trn s dng cc hm b sung t i tng cin, nh hm getline() c dng t bn ngoi


v hm ignore() b qua cc k t ph bn tri lnh read trc .

Con tr v tr File trong C++


C hai i tng istream v ostream u cung cp cc hm thnh vin xc nh li v tr ca
con tr v tr file (file-position pointer). Cc hm thnh vin ny l seekg (vit tt ca seek get) cho
istream v seekp (vit tt ca seek put) cho ostream trong C++.
Tham s cho seekg v seekp thng l mt long int. Tham s th hai c th c xc nh ch
dn hng tm kim. Hng tm kim c th l ios::beg (mc nh) xc nh v tr lin quan ti
phn bt u ca mt Stream, l ios::cur xc nh v tr lin quan ti v tr hin ti trong mt
Stream hoc l ios::end xc nh v tr lin quan ti phn kt thc ca mt Stream trong C++.
Con tr v tr file l mt gi tr integer m xc nh v tr trong file, tnh ton l s byte t v tr bt u
ca file . Di y l mt s v d xc nh v tr ca con tr v tr file trong C++:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 131

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

// position to the nth byte of fileObject (assumes ios::beg)


fileObject.seekg( n );

// position n bytes forward in fileObject


fileObject.seekg( n, ios::cur );

// position n bytes back from end of fileObject


fileObject.seekg( n, ios::end );

// position at end of fileObject


fileObject.seekg( 0, ios::end );

X l ngoi l (Exception Handling) trong


C++
Mt Exception (ngoi l) l mt vn xut hin trong khi thc thi mt chng trnh. Mt
Exception trong C++ l mt phn hi v mt tnh hung ngoi l m xut hin trong khi mt
chng trnh ang chy, v d nh chia cho s 0.
Exception cung cp mt cch truyn iu khin t mt phn ca mt chng trnh ti phn
khc. Exception Handling (X l ngoi l) trong C++ c xy dng da trn 3 t kha l: try,
catch, v throw.

throw: Mt chng trnh nm mt Exception khi mt vn xut hin. Vic ny c thc


hin bi s dng t kha throw trong C++.

catch: Mt chng trnh bt mt Exception vi mt Exception Handler ti v tr trong mt


chng trnh ni bn mun x l vn . T kha catch trong C++ ch dn vic bt mt
exception.

try: Mt khi try c th c bt bi mt s lng c th exception. N c theo sau bi


mt hoc nhiu khi catch.

Gi s mt khi s to mt Exeption, mt phng thc bt mt exception bi s dng kt hp cc


t kha try v catch. Mt khi try/catch c t xung quanh code m c th to mt exception.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 132

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Code bn trong mt khi try/catch c xem nh l code c bo v, v c php s dng


try/catch trong C++ nh sau:
try
{
// protected code
}catch( ExceptionName e1 )
{
// catch block
}catch( ExceptionName e2 )
{
// catch block
}catch( ExceptionName eN )
{
// catch block
}

Bn c th lit k nhiu lnh catch bt cc kiu exception khc nhau trong trng hp
khi try ca bn xut hin nhiu hn mt exception trong cc tnh hung khc nhau.

Nm Exception trong C++


Exception c th b nm bt c u bn trong mt khi code bi s dng cc lnh throwtrong
C++. Ton hng ca lnh throw quyt nh kiu cho exception v c th l bt k biu thc no v
kiu kt qu ca biu thc quyt nh kiu ca exception b nm.
V d sau minh ha vic nm mt exception khi chia cho s 0 trong C++:
double division(int a, int b)
{
if( b == 0 )
{
throw "Division by zero condition!";
}
return (a/b);
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 133

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Bt Exception trong C++


Khi catch theo sau khi try trong C++ s bt bt k exception no. Bn c th xc nh kiu ca
exception bn mun bt v iu ny c xc nh bi khai bo exception m xut hin trong cc
du ngoc n theo sau t kha catch trong C++.
try
{
// protected code
}catch( ExceptionName e )
{
// code to handle ExceptionName exception
}

Code trn s bt mt exception c kiu l ExceptionName. Nu bn mun xc nh rng mt khi


catch nn x l bt k kiu exception no b nm trong mt khi try, bn phi t mt du ba chm
() trong cc du ngoc n theo sau t kha catch, nh sau:
try
{
// protected code
}catch(...)
{
// code to handle any exception
}

V d sau nm mt exception khi chia cho s 0 v chng ta bt n trong khi catch.


#include <iostream>
using namespace std;

double division(int a, int b)


{
if( b == 0 )
{
throw "Division by zero condition!";

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 134

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

}
return (a/b);
}

int main ()
{
int x = 50;
int y = 0;
double z = 0;

try {
z = division(x, y);
cout << z << endl;
}catch (const char* msg) {
cerr << msg << endl;
}

return 0;
}

Bi v chng ta ang to mt exception c kiu const char*, v th trong khi bt exception ny,
chng ta phi s dng const char* trong khi catch. Nu chng ta bin dch v chy code trn, n
s cho kt qu sau:
Division by zero condition!

Standard Exception trong C++


C++ cung cp mt danh sch cc Standard Exception c nh ngha trong <exception>m
chng ta c th s dng trong cc chng trnh. Nhng exception ny c sp xp theo cu trc
th t cha-con nh sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 135

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Bng di l miu t ngn gn v mi exception c cp trong s trn:


Exception

Miu t

std::exception

Mt exception v lp cha ca tt c Standard Exception trong C++

std::bad_alloc

C th c nm bi new

std::bad_cast

C th c nm bi dynamic_cast

std::bad_exception

y l thit b hu ch x l Unexpected Exception trong mt


chng trnh C++

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 136

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

std::bad_typeid

C th c nm bi typeid

std::logic_error

Mt exception m theo l thuyt c th c pht hin bi vic c


code

std::domain_error

y l mt exception c nm khi mt min ton hc khng hp l


c s dng

std::invalid_argument

c nm do cc tham s khng hp l

std::length_error

c nm khi mt std::string qu ln c to ra

std::out_of_range

C th c nm bi mt phng thc, v d std::vector v


std::bitset<>::operator[]().

std::runtime_error

Mt exception m theo l thuyt khng th c pht hin bi vic


c code

std::overflow_error

c nm nu mt s trn lung ton hc (mathematical overflow)


xut hin

std::range_error

Xut hin khi bn c gng lu gi mt gi tr bn ngoi dy gi tr

std::underflow_error

c nm nu mt mathematical underflow (s trn di) xut hin

nh ngha Exception mi trong C++


Bn c th nh ngha cc exception cho ring bn bng vic k tha v ghi tnh nng lp
exception trong C++. V d sau minh ha cch bn c th s dng lp std::exception trin khai
exception ca ring bn theo mt cch chun trong C++:
#include <iostream>
#include <exception>
using namespace std;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 137

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

struct MyException : public exception


{
const char * what () const throw ()
{
return "C++ Exception";
}
};

int main()
{
try
{
throw MyException();
}
catch(MyException& e)
{
std::cout << "MyException caught" << std::endl;
std::cout << e.what() << std::endl;
}
catch(std::exception& e)
{
//Other errors
}
}

N s cho kt qu sau:
MyException caught
C++ Exception

y, what() l mt phng thc public c cung cp bi lp exception trong C++ v n


c ghi bi tt c cc lp exception con. V d ny tr v nguyn nhn ca mt exception
trong C++.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 138

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

B nh ng trong C++
Mt s hiu bit su v cch b nh ng thc s lm vic trong C++ l ct yu tr thnh mt
lp trnh vin C++ gii. B nh trong chng trnh C++ ca bn c phn thnh hai phn:

Stack: Tt c bin c khai bo bn trong hm s nhn b nh t stack trong C++.

Heap: c s dng cp pht b nh ng khi chng trnh chy.

Nhiu khi, bn khng bit trc bao nhiu b nh bn s cn lu thng tin c th trong mt
bin c nh ngha v kch c b nh cn thit c th c quyt nh ti run time.
Bn c th cp pht b nh ti run time bn trong Heap cho bin vi mt kiu cho bi s
dng mt ton t c bit trong C++ m tr v a ch ca khng gian cp pht. Ton t ny gi
l ton t new trong C++.
Nu bn khng cn thit b nh ng cp pht na, bn c th s dng ton t deletetrong
C++, s gii phng b nh c cp pht trc bi ton t new.

Ton t new v delete trong C++


y l c php chung s dng ton t new cp pht b nh ng cho bt k kiu d liu
no trong C++:
new data-type;

y, data-type c th l bt k kiu d liu c sn no v d nh mng hoc cc kiu d liu t


nh ngha nh lp hoc cu trc. u tin, chng ta xt cc kiu d liu c sn. V d, chng ta
c th nh ngha mt con tr ti kiu double v sau yu cu rng b nh c cp pht ti thi
gian thc thi. Chng ta c th lm iu ny bi s dng ton t newtrong C++ vi cc lnh sau:
double* pvalue
pvalue

= NULL; // Pointer initialized with null

= new double;

// Request memory for the variable

B nh c th cha c cp pht thnh cng, nu phn b nh ri (free store) c s dng.


V th, y l bi thc hnh tt cho bn khi kim tra nu ton t new tr v con tr NULL v thc
hin hnh ng thch hp, nh sau:
double* pvalue
if( !(pvalue

= NULL;
= new double ))

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 139

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

{
cout << "Error: out of memory." <<endl;
exit(1);

Hm malloc() t C, vn tn ti trong C++, nhng ti ngh bn trnh s dng hm malloc() ny.


Li th ln nht ca ton t new so vi hm malloc() l ton t new khng ch cp pht b nh, n
cn xy dng i tng theo mc ch chnh ca C++.
Ti bt k thi im, khi bn cm thy mt bin c cp pht ng l khng cn thit na, bn
c th gii phng b nh m n chim gi trong phn b nh ri vi ton tdelete trong C++,
nh sau:
delete pvalue;

// Release memory pointed to by pvalue

By gi, da vo cc khi nim trn chng ti to mt v d minh ha cch ton t new v delete
trong C++ lm vic:
#include <iostream>
using namespace std;

int main ()
{
double* pvalue
pvalue

= NULL; // Pointer initialized with null

= new double;

*pvalue = 29494.99;

// Request memory for the variable

// Store value at allocated address

cout << "Value of pvalue : " << *pvalue << endl;

delete pvalue;

// free up the memory.

return 0;
}

Khi code trn c bin dch v thc thi, n s cho kt qu:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 140

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Value of pvalue : 29495

Cp pht b nh ng cho Mng trong C++


Gi s bn mun cp pht b nh cho mt mng k t, v d mt chui 20 k t. Bn s dng
cng c php s dng trn, nh sau:
char* pvalue
pvalue

= NULL;

// Pointer initialized with null

= new char[20]; // Request memory for the variable

xa mng m chng ta va to, c php trong C++ l:


delete [] pvalue;

// Delete array pointed to by pvalue

y l c php chung ca ton t new, bn c th s dng cp pht b nh cho mt mng a


chiu trong C++:
double** pvalue
pvalue

= NULL;

// Pointer initialized with null

= new double [3][4]; // Allocate memory for a 3x4 array

Tuy nhin, c php gii phng b nh cho mng a chiu vn ging trn:
delete [] pvalue;

// Delete array pointed to by pvalue

Cp pht b nh ng cho i tng trong C++


i tng khng khc cc kiu d liu n gin. V d: bn xem xt code sau, trong chng ta
ang s dng mt mng i tng lm r khi nim ny:
#include <iostream>
using namespace std;

class Box
{
public:
Box() {
cout << "Constructor called!" <<endl;
}
~Box() {

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 141

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Destructor called!" <<endl;


}
};

int main( )
{
Box* myBoxArray = new Box[4];

delete [] myBoxArray; // Delete array

return 0;
}

Nu bn chun b cp pht b nh cho mt mng 4 i tng Box, constructor n gin trn s


c gi 4 ln v tng t trong khi xa cc i tng, destructor cng s c gi vi s ln
tng t.
Bin dch v thc thi code trn s cho kt qu:
Constructor called!
Constructor called!
Constructor called!
Constructor called!
Destructor called!
Destructor called!
Destructor called!
Destructor called!

Namespace trong C++


Xt mt tnh hung, khi chng ta c hai ngi cng tn l Zara, trng cng lp. Bt c khi no
chng ta cn phn bit h mt cch trc tip, chng ta phi s dng thng tin b sung cng vi tn
ca h, v d: v tr h sng v tn cha m ca h,

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 142

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Tnh hung tng t xy ra trong C++. V d: C th bn ang vit mt code m c mt hm l


xyz() v c th vin khc c sn m cng c cng hm xyz() ny. By gi, compiler khng bit
phin bn no ca hm xyz() bn mun s dng trong code ca bn.
Mt namespace trong C++ gip bn vt qua tnh hung ny v c s dng nh l thng tin b
sung phn bit cc hm, lp, bin, cng tn c sn trong cc th vin khc nhau. S dng
namespace trong C++, bn c th nh ngha bi cnh trong cc tn c nh ngha. V bn
cht, mt namespace nh ngha mt phm vi (scope) trong C++.

nh ngha mt Namespace trong C++


Mt nh ngha namespace bt u vi t kha namespace c theo sau bi tn ca
namespace , nh sau:
namespace namespace_name {
// code declarations
}

gi phin bn namespace ca hm hoc bin, bn ph thm vo sau tn ca namespace, nh


sau:
name::code;

// code could be variable or function.

V d sau minh ha cch namespace nh ngha phm vi ca bin v hm trong C++:


#include <iostream>
using namespace std;

// first name space


namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
}
// second name space
namespace second_space{
void func(){

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 143

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Inside second_space" << endl;


}
}
int main ()
{

// Calls function from first name space.


first_space::func();

// Calls function from second name space.


second_space::func();

return 0;
}

Bin dch v thc thi code trn s cho kt qu:


Inside first_space
Inside second_space

using namespace directive trong C++


Bn c th trnh vic ph thm vo sau tn ca namespace bng vic s dng using
namespace directive trong C++. Directive ny ni cho compiler rng dy code sau ang s dng
cc tn c xc nh trong namespace xc nh . Bn xt v d:
#include <iostream>
using namespace std;

// first name space


namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
}
// second name space

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 144

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

namespace second_space{
void func(){
cout << "Inside second_space" << endl;
}
}
using namespace first_space;
int main ()
{

// This calls function from first name space.


func();

return 0;
}

Bin dch v thc thi code trn s cho kt qu:


Inside first_space

using namespace directive trong C++ cng c th c s dng tham chiu mt item c th
trong mt namespace. V d, nu bn ch c nh s dng mt phn cout ca std namespace,
bn c th tham chiu n nh sau:
using std::cout;

Phn code theo sau c th tham chiu ti cout m khng cn ph thm vo sau namespace,
nhng cc item khc trong std namespace vn cn phi r rng, nh sau:
#include <iostream>
using std::cout;

int main ()
{

cout << "std::endl is used with std!" << std::endl;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 145

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

return 0;
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


std::endl is used with std!

Cc tn c gii thiu trong mt using namespace directive tun theo cc qui tc phm vi
(scope rule). Tn l nhn thy bt u t v tr ca using namespace directive ti phn cui ca
phm vi m trong directive ny c thy. Cc thc th vi cng tn c nh ngha trong
phm vi bn ngoi b n.

Namespace khng k nhau trong C++


Mt namespace c th c nh ngha thnh mt s phn v v th mt namespace c to t
mt tp hp cc phn c nh ngha ring bit. Cc phn ring bit ny ca mt namespace c
th nhiu file khc nhau.
V th, nu mt phn ca namespace yu cu mt tn c nh ngha file khc, th tn
vn phi c khai bo. nh ngha namespace sau hoc nh ngha mt namespace mi hoc
thm cc phn t mi ti namespace tn ti:
namespace namespace_name {
// code declarations
}

Namespace lng nhau trong C++


Trong C++, namespace c th lng vo nhau, tc l bn c th nh ngha mt namespace bn
trong mt namespace khc, nh sau:
namespace namespace_name1 {
// code declarations
namespace namespace_name2 {
// code declarations
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 146

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Bn c th truy cp cc thnh vin ca namespace lng nhau ny bi s dng ton t phn gii
phm vi (resolution operator) trong C++, nh sau:
// to access members of namespace_name2
using namespace namespace_name1::namespace_name2;

// to access members of namespace:name1


using namespace namespace_name1;

Trong cc lnh trn, nu bn ang s dng namespace_name1, th n s lm cho cc phn t ca


namespace_name2 c sn trong phm vi , nh sau:
#include <iostream>
using namespace std;

// first name space


namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
// second name space
namespace second_space{
void func(){
cout << "Inside second_space" << endl;
}
}
}
using namespace first_space::second_space;
int main ()
{

// This calls function from second name space.


func();

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 147

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

return 0;
}

Bin dch v thc thi code trn s cho kt qu:


Inside second_space

Template trong C++


Template l nn tng ca lp trnh tng qut (generic programming), tc l vit code theo cc m
c lp vi bt k kiu c th no.
Mt Template l mt blueprint hoc l phng thc to mt lp hoc mt hm tng qut. Cc
Library Container nh Iterator v cc thut ton l cc v d ca lp trnh tng qut v c
pht trin bi s dng khi nim Template.
Mi container c mt nh ngha n, v d vector, nhng chng ta c th nh ngha nhiu lot
vector khc nhau, v d: vector <int> hoc vector <string>.
Template l t kha trong C++, chng ta c th hiu rng l n mt kiu d liu tru tng, c
trng cho cc kiu d liu c bn. Template l t kha bo cho trnh bin dch rng on m sau
y nh ngha cho nhiu kiu d liu v m ngun ca n s c bin dch sinh ra tng ng
cho tng kiu d liu trong qu trnh bin dch. C hai kiu Template trong C++:

Function Template: l mt khun mu hm, cho php nh ngha cc hm tng qut thao
tc cho nhiu kiu d liu.

Class template: l mt khun mu lp, cho php nh ngha cc lp tng qut cho nhiu
kiu d liu

Function Template trong C++


Di y l c php chung ca mt nh ngha Function Template trong C++:
template <class type> ret-type func-name(parameter list)
{
// body of function
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 148

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

y, type l mt tn mt kiu d liu c s dng bi hm. Tn ny c th c s dng bn


trong nh ngha hm.
Sau y l mt v d v Function Template tr v gi tr ln nht ca hai gi tr:
#include <iostream>
#include <string>

using namespace std;

template <typename T>


inline T const& Max (T const& a, T const& b)
{
return a < b ? b:a;
}
int main ()
{

int i = 39;
int j = 20;
cout << "Max(i, j): " << Max(i, j) << endl;

double f1 = 13.5;
double f2 = 20.7;
cout << "Max(f1, f2): " << Max(f1, f2) << endl;

string s1 = "Hello";
string s2 = "World";
cout << "Max(s1, s2): " << Max(s1, s2) << endl;

return 0;
}

Bin dch v chy code trn s cho kt qu:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 149

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Max(i, j): 39
Max(f1, f2): 20.7
Max(s1, s2): World

Class Template trong C++


Ging nh khi chng ta c th nh ngha Function Template, chng ta cng c th nh ngha
Class Template trong C++. C php chung ca nh ngha Class Template trong C++ l:
template <class type> class class-name {
.
.
.
}

y, type l tn kiu, m s c xc nh khi mt lp c khai bo. Bn c th nh ngha


nhiu hn mt kiu d liu tng qut (generic) bi s dng mt danh sch phn bit nhau bi du
phy.
V d sau nh ngha lp Stack v trin khai cc phng thc tng qut push v pop cc phn
t t Stack . (Stack: ngn xp, push: thm nt mi vo nh stack, pop: thao tc ly 1 phn t t
nh stack).
#include <iostream>
#include <vector>
#include <cstdlib>
#include <string>
#include <stdexcept>

using namespace std;

template <class T>


class Stack {
private:
vector<T> elems;

// elements

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 150

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

public:
void push(T const&);

// push element

void pop();

// pop element

T top() const;

// return top element

bool empty() const{

// return true if empty.

return elems.empty();
}
};

template <class T>


void Stack<T>::push (T const& elem)
{
// append copy of passed element
elems.push_back(elem);
}

template <class T>


void Stack<T>::pop ()
{
if (elems.empty()) {
throw out_of_range("Stack<>::pop(): empty stack");
}
// remove last element
elems.pop_back();
}

template <class T>


T Stack<T>::top () const
{
if (elems.empty()) {
throw out_of_range("Stack<>::top(): empty stack");
}
// return copy of last element

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 151

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

return elems.back();
}

int main()
{
try {
Stack<int>

intStack;

Stack<string> stringStack;

// stack of ints
// stack of strings

// manipulate int stack


intStack.push(7);
cout << intStack.top() <<endl;

// manipulate string stack


stringStack.push("hello");
cout << stringStack.top() << std::endl;
stringStack.pop();
stringStack.pop();
}
catch (exception const& ex) {
cerr << "Exception: " << ex.what() <<endl;
return -1;
}
}

Bin dch v chy code trn s cho kt qu:


7
hello
Exception: Stack<>::pop(): empty stack

B tin x l (Preprocessor) trong C++


B tin x l (Preprocessor) l cc directive (ch th), cung cp ch lnh ti b bin dch tin x
l thng tin trc khi bt u bin dch thc s.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 152

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Tt c ch th tin x l (Preprocessor directive) bt u vi #, v ch c cc k t khong trng


trng (white-space) l c th xut hin trc mt ch th tin x l trn mt dng. Ch th tin x l
khng l cc lnh trong C++, v th chng khng kt thc vi mt du chm phy.
Bn thy mt ch th tin x l l #include trong tt c v d. Macro ny c s dng bao
mt Header file vo trong source file.
C mt s ch th tin x l c h tr bi C++ nh #include, #define, #if, #else, #line, Di
y, chng ti s trnh by cc ch th tin x l quan trng trong C++:

B tin x l # define trong C++


Ch th tin x l #define to cc biu tng hng. Biu tng hng l mt macro v mu chung
ca ch th tin x l ny trong C++ l:
#define macro-name replacement-text

Khi dng ny xut hin trong mt file, tt c macro xut hin theo sau trong file ny s c thay
th bi replacement-text trc khi chng trnh c bin dch. V d:
#include <iostream>
using namespace std;

#define PI 3.14159

int main ()
{

cout << "Value of PI :" << PI << endl;

return 0;
}

Gi s chng ta c source file, sau bin dch n vi ty chn E v hng kt qu ti test.p.


By gi, nu bn kim tra test.p, n s c nhiu thng tin v ti di cng, bn s tinh chnh gi tr
c thay th nh sau:
$gcc -E test.cpp > test.p

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 153

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

...
int main ()
{

cout << "Value of PI :" << 3.14159 << endl;

return 0;
}

Function-Like Macro trong C++


Bn c th s dng ch th tin x l #define trong C++ nh ngha mt macro m s nhn tham
s nh sau:
#include <iostream>
using namespace std;

#define MIN(a,b) (((a)<(b)) ? a : b)

int main ()
{
int i, j;
i = 100;
j = 30;
cout <<"The minimum is " << MIN(i, j) << endl;

return 0;
}

Bin dch v thc thi code trn s cho kt qu sau:


The minimum is 30

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 154

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Bin dch c iu kin trong C++


C mt s ch th tin x l c th s dng bin dch c s tuyn chn gia cc phn trong
source code ca bn. Tin trnh ny c gi l bin dch c iu kin.
Ch lnh tin x l c iu kin kh ging vi cu trc la chn if. Bn xt code sau:
#ifndef NULL
#define NULL 0
#endif

Bn c th bin dch mt chng trnh vi mc ch debug v c th tt hoc bt vic debug ny


bi s dng mt macro trong C++, nh sau:
#ifdef DEBUG
cerr <<"Variable x = " << x << endl;
#endif

Lnh cerr c bin dch trong chng trnh nu biu tng hng DEBUG c nh ngha
trc ch th #ifdef DEBUG. Bn c th s dng lnh #if 0 ch thch mt phn ca chng
trnh, nh sau:
#if 0
code prevented from compiling
#endif

Bn th v d sau:
#include <iostream>
using namespace std;
#define DEBUG

#define MIN(a,b) (((a)<(b)) ? a : b)

int main ()
{
int i, j;
i = 100;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 155

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

j = 30;
#ifdef DEBUG
cerr <<"Trace: Inside main function" << endl;
#endif

#if 0
/* This is commented part */
cout << MKSTR(HELLO C++) << endl;
#endif

cout <<"The minimum is " << MIN(i, j) << endl;

#ifdef DEBUG
cerr <<"Trace: Coming out of main function" << endl;
#endif
return 0;
}

Bin dch v thc thi code trn s cho kt qu sau:


Trace: Inside main function
The minimum is 30
Trace: Coming out of main function

Cc ton t # v ## trong C++


Cc ton t tin x l # v ## l c sn trong C++ v ANSI/ISO C. Ton t # thng bo rng on
vn bn thay th s c chuyn i sang mt chui bao quanh bi du ngoc kp.
Bn xt nh ngha macro sau:
#include <iostream>
using namespace std;

#define MKSTR( x ) #x

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 156

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

int main ()
{
cout << MKSTR(HELLO C++) << endl;

return 0;
}

Bin dch v chy code trn s cho kt qu sau:


HELLO C++

By gi, chng ta xt cch n lm vic. N l n gin hiu rng b tin x l C++ chuyn
dng sau:
cout << MKSTR(HELLO C++) << endl;

Thnh dng:
cout << "HELLO C++" << endl;

Ton t ## c s dng ni chui hai token. V d:


#define CONCAT( x, y )

x ## y

Khi CONCAT xut hin trong chng trnh, cc tham s ca n c ni chui v c s dng
thay th cho macro. V d, CONCAT(HELLO, C++) c thay th bi "HELLO C++" trong
chng trnh sau:
#include <iostream>
using namespace std;

#define concat(a, b) a ## b
int main()
{
int xy = 100;

cout << concat(x, y);


return 0;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 157

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Bin dch v thc thi code trn s cho kt qu:


100

Gi chng ta xt cch chng lm vic. n gin l b tin x l C++ chuyn dng sau:
cout << concat(x, y);

Thnh dng:
cout << xy;

Macro tin nh ngha trong C++


C++ cung cp mt s macro c nh ngha trc nh lit k di y:
Macro

Miu t

__LINE__

Cha s dng hin ti ca chng trnh khi n ang c bin


dch

__FILE__

Cha tn file hin ti ca chng trnh khi n ang c bin


dch

__DATE__

Cha mt chui month/day/year l ngy source code c bin


dch

__TIME__

Cha mt chui hour:minute:second l thi gian chng trnh


c bin dch

Di y l v d cho tt c macro trn trong C++:


#include <iostream>
using namespace std;

int main ()

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 158

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

{
cout << "Value of __LINE__ : " << __LINE__ << endl;
cout << "Value of __FILE__ : " << __FILE__ << endl;
cout << "Value of __DATE__ : " << __DATE__ << endl;
cout << "Value of __TIME__ : " << __TIME__ << endl;

return 0;
}

Bin dch v thc thi code trn s cho kt qu:


Value of __LINE__ : 6
Value of __FILE__ : test.cpp
Value of __DATE__ : Feb 28 2011
Value of __TIME__ : 18:52:48

X l tn hiu (Signal Handling) trong C++


Tn hiu (Signal) l cc ngt (interrupt) c phn phi ti mt tin trnh x l bi h iu hnh
m c th kt thc mt chng trnh. Bn c th to cc ngt bng vic nhn CTRL+C trn h
thng UNIX, LINUX, Mac OS hoc Windows.
C cc signal m khng th b bt bi chng trnh, nhng cng c signal m bn c th bt trong
chng trnh ca bn, v c th thc hin cc hnh ng thch hp da trn signal . Nhng
signal ny c nh ngha trong Header file ca C++ l <csignal>.
Signal

Miu t

SIGABRT

S kt thc bt thng ca chng trnh, v d mt li gi ti abort

SIGFPE

Mt hot ng s hc khng ng, v d nh chia cho s 0 hoc mt hot


ng lm trn lung (overflow)

SIGILL

S pht hin mt ch lnh khng hp l

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 159

http://vietjack.com/cplusplus/index.jsp
SIGINT

Nhn mt tn hiu tng tc

SIGSEGV

Mt truy cp khng hp l ti storage

SIGTERM

Mt yu cu kt thc c gi ti chng trnh

Copyright vietjack.com

Hm signal() trong C++


Th vin x l tn hiu trong C++ cung cp hm signal by cc s kin khng c mong i.
Di y l c php ca hm signal() trong C++:
void (*signal (int sig, void (*func)(int)))(int);

Hm ny nhn hai tham s: tham s u tin l mt integer m biu din s hiu tn hiu (signal
number) v tham s th hai l mt con tr ti hm x l tn hiu.
By gi, vit mt chng trnh C++ n gin bt tn hiu SIGINT bi s dng
hmsignal() trong C++. Bt c tn hiu no bn mun bt trong chng trnh, bn phi ghi tn hiu
bi s dng hm signal v lin kt n vi mt Signal Handler. Bn xt v d:
#include <iostream>
#include <csignal>

using namespace std;

void signalHandler( int signum )


{
cout << "Interrupt signal (" << signum << ") received.\n";

// cleanup and close up stuff here


// terminate program

exit(signum);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 160

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

int main ()
{
// register signal SIGINT and signal handler
signal(SIGINT, signalHandler);

while(1){
cout << "Going to sleep...." << endl;
sleep(1);
}

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


Going to sleep....
Going to sleep....
Going to sleep....

By gi, nhn CTRL+C ngt chng trnh v bn s thy rng chng trnh s bt tn hiu ny
v s in ci g nh sau:
Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.

Hm raise() trong C++


Bn c th to cc tn hiu bi hm raise() trong C++, m nhn mt s integer biu din signal
number nh mt tham s v c c php nh sau:
int raise (signal sig);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 161

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

y, sig l signal number gi bt k loi tn hiu no: SIGINT, SIGABRT, SIGFPE, SIGILL,
SIGSEGV, SIGTERM, SIGHUP. Di y l v d to mt tn hiu ni ti bi s dng hm raise()
trong C++, nh sau:
#include <iostream>
#include <csignal>

using namespace std;

void signalHandler( int signum )


{
cout << "Interrupt signal (" << signum << ") received.\n";

// cleanup and close up stuff here


// terminate program

exit(signum);

int main ()
{
int i = 0;
// register signal SIGINT and signal handler
signal(SIGINT, signalHandler);

while(++i){
cout << "Going to sleep...." << endl;
if( i == 3 ){
raise( SIGINT);
}
sleep(1);
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 162

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

return 0;
}

Bin dch v thc thi code trn, n s cho kt qu sau:


Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.

a lung (Multithread) trong C++


a lung (Multithreading) l mt form chuyn dng ca a nhim (multitasking) v mt a nhim
l tnh nng cho php my tnh ca bn chy hai hoc nhiu chng trnh ng thi. Ni chung, c
hai kiu a nhim l: process-based v thread-based tng ng: da trn tin trnh v da trn
lung.
a nhim da trn tin trnh x l vic thc thi ng thi ca cc chng trnh. a nhim da trn
lung x l vic thc thi ng thi cc phn ca cng mt chng trnh.
Mt chng trnh a lung cha hai hoc nhiu phn m c th chy ng thi. Mi phn ca
chng trnh c gi l mt thread, v mi thread nh ngha mt path ring bit ca s thc
thi.
C++ khng cha bt k h tr c sn no cho cc ng dng a lung. Thay vo , n da hon
ton vo H iu hnh cung cp tnh nng ny.
Chng ny gi s bn ang lm vic trn H iu hnh Linux v chng ti ang chun b vit
chng trnh a lung trong C++ bi s dng POSIX. POSIX Threads hoc Pthreads cung cp
API m c sn trn nhiu h thng nh FreeBSD, NetBSD, GNU/Linux, Mac OS X v Solaris.

To Thread trong C++


y l chng trnh chng ta s dng to mt POSIX thread:
#include <pthread.h>
pthread_create (thread, attr, start_routine, arg)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 163

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

y, pthread_create to mt thread mi v lm n c th thc thi. Chng trnh ny c th


c gi bt c thi im no bt c u trong code ca bn. Di y l miu t cc tham s:
Tham s

Miu t

thread

Mt nh danh duy nht cho thread mi c tr v bi chng trnh


con

attr

Mt thuc tnh m c th c s dng thit lp cc thuc tnh ca


thread. Bn c th xc nh mt i tng thuc tnh thread, hoc
NULL cho cc gi tr mc nh

start_routine

Chng trnh C++ m thread ny s thc thi mt khi n c to

arg

Mt tham s n m c th c truyn ti start_routine. N phi


c truyn bi tham chiu dng mt con tr ca kiu void. NULL c
th c s dng nu khng c tham s no c truyn

S thread ti a c th c to bi mt tin trnh l ph thuc vo trnh trin khai


(Implementation). Mt khi c to, cc thread l ngang hng, v c th to cc thread khc.
Khng c s ph thuc gia cc thread trong C++.

Kt thuc Thread trong C++


Chng trnh sau c s dng kt thc mt POSIX thread trong C++:
#include <pthread.h>
pthread_exit (status)

y pthread_exit c s dng kt thc mt thread. Chng trnh pthread_exit() c gi


sau khi mt thread hon thnh cng vic ca n v khng cn thit phi tn ti na.
Nu main() kt thc trc cc thread n to, v kt thc chng trnh pthread_create(), th cc
thread khc s tip tc thc thi. Nu khng th, chng s t ng c kt thc khi main() hon
thnh.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 164

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

V d
V d n gin sau to 5 thread vi chng trnh pthread_create(). Mi thread in mt thng bo
Hello World!, v sau kt thc vi mt li gi ti pthread_exit() trong C++:
#include <iostream>
#include <cstdlib>
#include <pthread.h>

using namespace std;

#define NUM_THREADS

void *PrintHello(void *threadid)


{
long tid;
tid = (long)threadid;
cout << "Hello World! Thread ID, " << tid << endl;
pthread_exit(NULL);
}

int main ()
{
pthread_t threads[NUM_THREADS];
int rc;
int i;
for( i=0; i < NUM_THREADS; i++ ){
cout << "main() : creating thread, " << i << endl;
rc = pthread_create(&threads[i], NULL,
PrintHello, (void *)i);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 165

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

}
pthread_exit(NULL);
}

Bin dch chng trnh trn s dng th vin lpthread nh sau:


$gcc test.cpp -lpthread

By gi, thc thi chng trnh s cho kt qu:


main() : creating thread, 0
main() : creating thread, 1
main() : creating thread, 2
main() : creating thread, 3
main() : creating thread, 4
Hello World! Thread ID, 0
Hello World! Thread ID, 1
Hello World! Thread ID, 2
Hello World! Thread ID, 3
Hello World! Thread ID, 4

Truyn tham s ti Thread trong C++


V d ny minh ha cch truyn nhiu tham s thng qua mt cu trc. Bn c th truyn bt k
kiu d liu no trong mt Thread callback, bi v n tr ti void nh c gii thch trong v d
sau:
#include <iostream>
#include <cstdlib>
#include <pthread.h>

using namespace std;

#define NUM_THREADS

struct thread_data{
int

thread_id;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 166

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

char *message;
};

void *PrintHello(void *threadarg)


{
struct thread_data *my_data;

my_data = (struct thread_data *) threadarg;

cout << "Thread ID : " << my_data->thread_id ;


cout << " Message : " << my_data->message << endl;

pthread_exit(NULL);
}

int main ()
{
pthread_t threads[NUM_THREADS];
struct thread_data td[NUM_THREADS];
int rc;
int i;

for( i=0; i < NUM_THREADS; i++ ){


cout <<"main() : creating thread, " << i << endl;
td[i].thread_id = i;
td[i].message = "This is message";
rc = pthread_create(&threads[i], NULL,
PrintHello, (void *)&td[i]);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 167

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

pthread_exit(NULL);
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


main() : creating thread, 0
main() : creating thread, 1
main() : creating thread, 2
main() : creating thread, 3
main() : creating thread, 4
Thread ID : 3 Message : This is message
Thread ID : 2 Message : This is message
Thread ID : 0 Message : This is message
Thread ID : 1 Message : This is message
Thread ID : 4 Message : This is message

Kt hp v Tho g cc Thread trong C++


Hai c php sau c s dng kt hp (joining) hoc tho g (detaching) cc Thread trong
C++:
pthread_join (threadid, status)
pthread_detach (threadid)

Chng trnh con pthread_join() ng khi thread ang gi ti khi threadid kt thc. Khi mt thread
c to, mt trong cc thuc tnh nh ngha n l joinable hoc detached. Ch cc thread c
to vi dng joinable c th c kt hp. Nu mt thread c to vi dng detached, n khng
bao gi c kt hp.
V d sau minh ha cch i cho cc thread kt thc bi s dng chng trnh kt hp Pthread
trong C++:
#include <iostream>
#include <cstdlib>
#include <pthread.h>
#include <unistd.h>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 168

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

using namespace std;

#define NUM_THREADS

void *wait(void *t)


{
int i;
long tid;

tid = (long)t;

sleep(1);
cout << "Sleeping in thread " << endl;
cout << "Thread with id : " << tid << "

...exiting " << endl;

pthread_exit(NULL);
}

int main ()
{
int rc;
int i;
pthread_t threads[NUM_THREADS];
pthread_attr_t attr;
void *status;

// Initialize and set thread joinable


pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

for( i=0; i < NUM_THREADS; i++ ){


cout << "main() : creating thread, " << i << endl;
rc = pthread_create(&threads[i], NULL, wait, (void *)i );
if (rc){

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 169

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Error:unable to create thread," << rc << endl;


exit(-1);
}
}

// free attribute and wait for the other threads


pthread_attr_destroy(&attr);
for( i=0; i < NUM_THREADS; i++ ){
rc = pthread_join(threads[i], &status);
if (rc){
cout << "Error:unable to join," << rc << endl;
exit(-1);
}
cout << "Main: completed thread id :" << i ;
cout << "

exiting with status :" << status << endl;

cout << "Main: program exiting." << endl;


pthread_exit(NULL);
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


main() : creating thread, 0
main() : creating thread, 1
main() : creating thread, 2
main() : creating thread, 3
main() : creating thread, 4
Sleeping in thread
Thread with id : 0 .... exiting
Sleeping in thread
Thread with id : 1 .... exiting
Sleeping in thread
Thread with id : 2 .... exiting

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 170

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Sleeping in thread
Thread with id : 3 .... exiting
Sleeping in thread
Thread with id : 4 .... exiting
Main: completed thread id :0

exiting with status :0

Main: completed thread id :1

exiting with status :0

Main: completed thread id :2

exiting with status :0

Main: completed thread id :3

exiting with status :0

Main: completed thread id :4

exiting with status :0

Main: program exiting.

Lp trnh Web trong C++


CGI l g?

Common Gateway Interface hoc CGI l mt tp hp cc chun m nh ngha cch thng


tin c trao i gia Web Server v mt Custom Script.

CGI Specification hin ti c duy tr bi NCSA v NCSA nh ngha CGI nh sau:


Common Gateway Interface hoc CGI l mt chun cho cc chng trnh kt ni d mng
ngoi vi (external gateway programs) ti Interface vi thng tin t Server nh HTTP
Server.

Phin bn hin ti l CGI/1.1 v CGI/1.2 ang trong qu trnh pht trin.

Web Browsing
hiu khi nim v CGI, chng ta xem nhng g xy ra khi chng ta nhn vo mt hyperlink
ti mt Webpage hoc URL c th.

Trnh duyt ca bn lin h HTTP Web Server v yu cu mt URL, v d: filename.

Web Server s parse URL v s tm kim filename. Nu n tm thy file yu cu, th


Web Server gi file tr li trnh duyt, nu khng th, n gi mt thng bo li ch rng
bn yu cu mt wrong file.

Trnh duyt Web nhn phn hi t Web Server v hin th file nhn c hoc thng bo
li da trn phn hi nhn.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 171

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Tuy nhin, n l c th thit lp HTTP Server theo cch m bt c khi no mt file trong mt th
mc c th c yu cu, th file khng c gi tr li; thay cho vic n c thc thi nh l
mt chng trnh v output c to t chng trnh gi ti trnh duyt hin th.
Common Gateway Interface hoc CGI l mt giao thc chun cho cc ng dng (c gi l CGI
program hoc CGI script) kh nng tng tc vi Web Server v vi Client. Nhng CGI program
ny c th c vit bng Python, PERL, Shell, C hoc C++

S cu trc CGI
Di y l s mt cu trc n gin ca CGI:

Cu hnh Web Server


Trc khi bn tip tc vi lp trnh CGI, m bo rng Web Server ca bn h tr CGI v n c
nh cu hnh x l CGI Program. Tt c CGI program c thc thi bi HTTP Server c
gi trong mt th mc c nh cu hnh trc. Th mc ny c gi l CGI directory, v theo

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 172

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

qui c, n c t tn l /var/www/cgi-bin. Theo qui c, CGI file c ui l .cgi, v th chng l


c th thc thi trong C++.
Theo mc nh, Apache Web Server c nh cu hnh chy CGI Program trong /var/www/cgibin. Nu bn mun xc nh bt k th mc khc chy CGI script ca bn, th bn phi sa i
khu vc sau trong httpd.conf file:
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

<Directory "/var/www/cgi-bin">
Options All
</Directory>

Chng trnh CGI u tin


Xt ni dung chng trnh C++ sau:
#include <iostream>
using namespace std;

int main ()
{

cout << "Content-type:text/html\r\n\r\n";


cout << "<html>\n";
cout << "<head>\n";
cout << "<title>Hello World - First CGI Program</title>\n";
cout << "</head>\n";
cout << "<body>\n";
cout << "<h2>Hello World! This is my first CGI program</h2>\n";
cout << "</body>\n";

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 173

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "</html>\n";

return 0;
}

Bin dch code trn v t tn l cplusplus.cgi. File ny c gi trong th mc /var/www/cgi-bin


v n c ni dung nh sau. Trc khi chy CGI Program ca bn, bo m rng bn chuyn
ch ca file bi s dng lnh chmod 755 cplusplus.cgi trn UNIX lm file c th thc thi. By
gi, nu bn nhn vo cplusplus.cgi, th n s cho kt qu:

Hello World! This is my first CGI program


Chng trnh C++ trn l mt chng trnh n gin m ang vit output trn STDOUT file, v d:
mn hnh. C mt tnh nng quan trng c sn dng u tin c in l Contenttype:text/html\r\n\r\n. Dng ny gi tr li trnh duyt v xc nh kiu ni dung c hin th
trn mn hnh trnh duyt. By gi bn hiu khi nim c bn v CGI v bn c th vit nhiu
CGI Program phc tp bi s dng C++. Mt CGI Program trong C++ c th tng tc vi bt k
h thng ngoi vi khc nh RDBMS, trao i thng tin.

HTTP Header
Dng Content-type:text/html\r\n\r\n l mt phn ca HTTP Header, m c gi ti trnh duyt.
Tt c HTTP Header c form sau:
HTTP Field Name: Field Content

For Example
Content-type: text/html\r\n\r\n

Di y l mt s HTTP Header quan trng, m bn s s dng thng xuyn trong Lp trnh


CGI.
Header

Miu t

Content-type:

Mt chui MIME nh ngha nh dng ca file ang c tr v.


V d: Content-type:text/html

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 174

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Expires: Date

Ngy thng tin ht hiu lc. N nn c s dng bi trnh


duyt quyt nh khi no mt trang cn c refresh. Mt
chui date hp l nn trong nh dng 01 Jan 1998 12:00:00
GMT

Location: URL

URL m nn c tr v thay cho URL yu cu. Bn c th


s dng trng ny redirect mt yu cu ti bt k file no

Last-modified: Date

Ngy sa i cui cng ca ngun

Content-length: N

di, bng byte, ca d liu ang c tr v. Trnh duyt s


dng gi tr ny bo co lng thi gian download c lng
cho mt file

Set-Cookie: String

Thit lp cookie truyn thng qua string

Bin mi trng ca CGI


Tt c CGI Program s c truy cp ti cc bin mi trng sau y. Nhng bin ny ng vai tr
quan trng trong khi vit bt k CGI Program no:
Tn bin

Miu t

CONTENT_TYPE

Kiu d liu ca ni dung. c s dng khi Client gi ni dung


nh km ti Server. V d: file upload

CONTENT_LENGTH

di ca thng tin truy vn. N ch c sn cho cc yu cu


POST

HTTP_COOKIE

Tr v cc cookie thit lp trong form l cp key/value

HTTP_USER_AGENT

Trng request-header l User-Agent cha thng tin v User


Agent bt u yu cu . N l tn ca trnh duyt web

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 175

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

PATH_INFO

L path cho CGI script

QUERY_STRING

Thng tin m ha URL c gi vi phng thc GET

REMOTE_ADDR

a ch IP ca host t xa to yu cu . N c th l hu ch
cho mc ch log hoc authentication

REMOTE_HOST

Tn y ca host to yu cu . Nu thng tin ny khng c


sn, th REMOTE_ADDR c th c s dng ly a ch IP

REQUEST_METHOD

Phng thc c s dng to yu cu. Cc phng thc


ph bin l GET v POST

SCRIPT_FILENAME

Path y ti CGI script

SCRIPT_NAME

Tn ca CGI script

SERVER_NAME

Hostname hoc a ch IP ca Server

SERVER_SOFTWARE

Tn v phin bn ca phn mm m Server ang chy

Sau y l chng trnh CGI nh lit k tt c bin CGI. Bn click vo y xem kt qu:Get
Environment

#include <iostream>
#include <stdlib.h>
using namespace std;

const string ENV[ 24 ] = {

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 176

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

"COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE",


"HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING",
"HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION",
"HTTP_HOST", "HTTP_USER_AGENT", "PATH",
"QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",
"REQUEST_METHOD", "REQUEST_URI", "SCRIPT_FILENAME",
"SCRIPT_NAME", "SERVER_ADDR", "SERVER_ADMIN",
"SERVER_NAME","SERVER_PORT","SERVER_PROTOCOL",
"SERVER_SIGNATURE","SERVER_SOFTWARE" };

int main ()
{

cout << "Content-type:text/html\r\n\r\n";


cout << "<html>\n";
cout << "<head>\n";
cout << "<title>CGI Envrionment Variables</title>\n";
cout << "</head>\n";
cout << "<body>\n";
cout << "<table border = \"0\" cellspacing = \"2\">";

for ( int i = 0; i < 24; i++ )


{
cout << "<tr><td>" << ENV[ i ] << "</td><td>";
// attempt to retrieve value of environment variable
char *value = getenv( ENV[ i ].c_str() );
if ( value != 0 ){
cout << value;
}else{
cout << "Environment variable does not exist.";
}
cout << "</td></tr>\n";
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 177

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "</table><\n";


cout << "</body>\n";
cout << "</html>\n";

return 0;
}

Th vin CGI trong C++


Vi cc v d thc t, bn s cn thc hin nhiu hot ng bi CGI Program ca bn. C mt th
vin CGI c vit cho chng trnh C++, m bn c th ti v t:ftp://ftp.gnu.org/gnu/cgicc/ v
theo cc bc sau ci t th vin ny:
$tar xzf cgicc-X.X.X.tar.gz
$cd cgicc-X.X.X/
$./configure --prefix=/usr
$make
$make install

Bn c th kim tra Documentation c sn ti: C++ CGI Lib Documentation.

Phng thc POST v GET


Bn gp mt s tnh hung khi bn cn truyn mt s thng tin t trnh duyt ti Web Server v
sau cng ti CGI Program ca bn. Hai phng thc c s dng thng xuyn nht bi trnh
duyt truyn cc thng tin ny ti Web Server l Phng thc GET v Phng thc POST.

Truyn thng tin bi s dng phng thc GET


Phng thc GET gi thng tin ngi dng m ha c ph thm ti trang yu cu. Trang v
thng tin m ha c phn bit bi k t ? nh sau:
http://www.test.com/cgi-bin/cpp.cgi?key1=value1&key2=value2

Phng thc GET l phng thc mc nh truyn thng tin t trnh duyt ti Web Server v
n to ra mt chui di xut hin trong Location:box ca trnh duyt. ng bao gi s dng
phng thc GET nn bn c mt khu hoc thng tin nhy cm khc truyn ti Server.
Phng thc GET c gii hn kch c v bn c th truyn 1024 k t trong mt Request String.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 178

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Khi s dng phng thc GET, thng tin c truyn bi trng HTTP Header l
QUERY_STRING v s l c th truy cp trong CGI Program thng qua bin mi trng
QUERY_STRING.
Bn c th truyn thng tin bng vic ni chui cc cp key/value cng vi bt k URL hoc bn c
th s dng cc th HTML <FORM> truyn thng tin bi s dng phng thc GET.

V d URL n gin s dng phng thc GET


y l mt URL n gin s truyn hai value ti chng trnh hello_get.py bi s dng phng
thc GET.
/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI
Di y l chng trnh to CGI Program l cpp_get.cgi x l input c cung cp bi
trnh duyt web. Chng ta ang s dng th vin CGI trong C++, lm cho n d dng hn
truy cp thng tin truyn:
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <stdlib.h>

#include <cgicc/CgiDefs.h>
#include <cgicc/Cgicc.h>
#include <cgicc/HTTPHTMLHeader.h>
#include <cgicc/HTMLClasses.h>

using namespace std;


using namespace cgicc;

int main ()
{
Cgicc formData;

cout << "Content-type:text/html\r\n\r\n";

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 179

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "<html>\n";


cout << "<head>\n";
cout << "<title>Using GET and POST Methods</title>\n";
cout << "</head>\n";
cout << "<body>\n";

form_iterator fi = formData.getElement("first_name");
if( !fi->isEmpty() && fi != (*formData).end()) {
cout << "First name: " << **fi << endl;
}else{
cout << "No text entered for first name" << endl;
}
cout << "<br/>\n";
fi = formData.getElement("last_name");
if( !fi->isEmpty() &&fi != (*formData).end()) {
cout << "Last name: " << **fi << endl;
}else{
cout << "No text entered for last name" << endl;
}
cout << "<br/>\n";

cout << "</body>\n";


cout << "</html>\n";

return 0;
}

By gi, bin dch chng trnh trn nh sau:


$g++ -o cpp_get.cgi cpp_get.cpp -lcgicc

To cpp_get.cgi v t n trong th mc CGI ca bn.


N s cho kt qu:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 180

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

First name: ZARA


Last name: ALI

V d v FORM bi s dng phng thc GET


V d n gin sau s truyn hai value bi s dng HTML FORM v nt submit. Chng ta ang s
dng cng CGI Program l cpp_get.cgi x l input ny.
<form action="/cgi-bin/cpp_get.cgi" method="get">
First Name: <input type="text" name="first_name">

<br />

Last Name: <input type="text" name="last_name" />


<input type="submit" value="Submit" />
</form>

y l output thc s ca form trn. Bn c th nhp First v Last Name v sau click nt
Submit xem kt qu:

First Name:
Last Name:

Submit

Truyn thng tin bi s dng phng thc POST


Mt phng thc chung ng tin cy hn truyn thng tin ti mt CGI Program l phng thc
POST. N ng gi thng tin theo cch ging phng thc GET, nhng thay v gi n dng mt
chui vn bn sau mt du ? trong URL, n gi dng mt thng bo ring bit. Thng bo ny
ti CGI Script trong form u vo chun.
Cng s dng CGI Program l cpp_get.cgi x l phng thc POST. Chng ta s dng cng v
d nh trn, m s truyn hai value bi s dng HTML FORM v nt Submit, nhng ln ny vi
phng thc POST nh sau:
<form action="/cgi-bin/cpp_get.cgi" method="post">
First Name: <input type="text" name="first_name"><br />
Last Name: <input type="text" name="last_name" />

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 181

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

<input type="submit" value="Submit" />


</form>

y l output thc s ca form trn. Bn nhp First v Last Name v sau nhn nt Submit
xem kt qu:

First Name:
Submit

Last Name:

Truyn Checkbox Data ti CGI Program


Checkbox c s dng khi c nhiu hn mt ty chn l cn thit c la chn:
HTML code sau l v d cho mt form vi hai checkbox:
<form action="/cgi-bin/cpp_checkbox.cgi"
method="POST"
target="_blank">
<input type="checkbox" name="maths" value="on" /> Maths
<input type="checkbox" name="physics" value="on" /> Physics
<input type="submit" value="Select Subject" />
</form>

Kt qu ca code ny l form sau:

Maths

Physics

Select Subject

Chng trnh C++ sau s to cpp_checkbox.cgi x l input c cung cp bi trnh duyt


thng qua nt checkbox:
#include <iostream>
#include <vector>
#include <string>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 182

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

#include <stdio.h>
#include <stdlib.h>

#include <cgicc/CgiDefs.h>
#include <cgicc/Cgicc.h>
#include <cgicc/HTTPHTMLHeader.h>
#include <cgicc/HTMLClasses.h>

using namespace std;


using namespace cgicc;

int main ()
{
Cgicc formData;
bool maths_flag, physics_flag;

cout << "Content-type:text/html\r\n\r\n";


cout << "<html>\n";
cout << "<head>\n";
cout << "<title>Checkbox Data to CGI</title>\n";
cout << "</head>\n";
cout << "<body>\n";

maths_flag = formData.queryCheckbox("maths");
if( maths_flag ) {
cout << "Maths Flag: ON " << endl;
}else{
cout << "Maths Flag: OFF " << endl;
}
cout << "<br/>\n";

physics_flag = formData.queryCheckbox("physics");
if( physics_flag ) {

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 183

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Physics Flag: ON " << endl;


}else{
cout << "Physics Flag: OFF " << endl;
}
cout << "<br/>\n";
cout << "</body>\n";
cout << "</html>\n";

return 0;
}

Truyn Radiobutton Data ti CGI Program


Radio Button c s dng khi ch c mt ty chn l cn thit la chn.
HTML code sau l v d cho form vi hai radio button:
<form action="/cgi-bin/cpp_radiobutton.cgi"
method="post"
target="_blank">
<input type="radio" name="subject" value="maths"
checked="checked"/> Maths
<input type="radio" name="subject" value="physics" /> Physics
<input type="submit" value="Select Subject" />
</form>

Kt qu ca code trn l form sau:

Maths

Physics

Select Subject

Chng trnh C++ sau s to cpp_radiobutton.cgi x l input c cung cp bi trnh duyt


web thng qua cc radio button:
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 184

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

#include <stdlib.h>

#include <cgicc/CgiDefs.h>
#include <cgicc/Cgicc.h>
#include <cgicc/HTTPHTMLHeader.h>
#include <cgicc/HTMLClasses.h>

using namespace std;


using namespace cgicc;

int main ()
{
Cgicc formData;

cout << "Content-type:text/html\r\n\r\n";


cout << "<html>\n";
cout << "<head>\n";
cout << "<title>Radio Button Data to CGI</title>\n";
cout << "</head>\n";
cout << "<body>\n";

form_iterator fi = formData.getElement("subject");
if( !fi->isEmpty() && fi != (*formData).end()) {
cout << "Radio box selected: " << **fi << endl;
}

cout << "<br/>\n";


cout << "</body>\n";
cout << "</html>\n";

return 0;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 185

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Truyn Text Area Data ti CGI Program


Phn t TEXTAREA c s dng khi vn bn nhiu dng phi c truyn ti CGI Program.
HTML code sau l v d cho mt form vi mt TEXTAREA box:
<form action="/cgi-bin/cpp_textarea.cgi"
method="post"
target="_blank">
<textarea name="textcontent" cols="40" rows="4">
Type your text here...
</textarea>
<input type="submit" value="Submit" />
</form>

y l kt qu ca form trn:

Submit

Chng trnh C++ sau s to cpp_textarea.cgi x l input c cung cp bi trnh duyt web
thng qua text area:
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <stdlib.h>

#include <cgicc/CgiDefs.h>
#include <cgicc/Cgicc.h>
#include <cgicc/HTTPHTMLHeader.h>
#include <cgicc/HTMLClasses.h>

using namespace std;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 186

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

using namespace cgicc;

int main ()
{
Cgicc formData;

cout << "Content-type:text/html\r\n\r\n";


cout << "<html>\n";
cout << "<head>\n";
cout << "<title>Text Area Data to CGI</title>\n";
cout << "</head>\n";
cout << "<body>\n";

form_iterator fi = formData.getElement("textcontent");
if( !fi->isEmpty() && fi != (*formData).end()) {
cout << "Text Content: " << **fi << endl;
}else{
cout << "No text entered" << endl;
}

cout << "<br/>\n";


cout << "</body>\n";
cout << "</html>\n";

return 0;
}

Truyn DropDown Box Data ti CGI Program


DropDown Box c s dng khi c nhiu ty chn c sn, nhng ch c mt hoc hai s c
chn:
HTML code sau l v d cho mt form vi mt Dropdown box:
<form action="/cgi-bin/cpp_dropdown.cgi"

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 187

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

method="post" target="_blank">
<select name="dropdown">
<option value="Maths" selected>Maths</option>
<option value="Physics">Physics</option>
</select>
<input type="submit" value="Submit"/>
</form>

Kt qu ca code trn l form sau:


Maths

Submit

Chng trnh C++ sau s to cpp_dropdown.cgi x l input c cung cp bi trnh duyt


web thng qua dropdown box:
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <stdlib.h>

#include <cgicc/CgiDefs.h>
#include <cgicc/Cgicc.h>
#include <cgicc/HTTPHTMLHeader.h>
#include <cgicc/HTMLClasses.h>

using namespace std;


using namespace cgicc;

int main ()
{
Cgicc formData;

cout << "Content-type:text/html\r\n\r\n";


cout << "<html>\n";

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 188

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "<head>\n";


cout << "<title>Drop Down Box Data to CGI</title>\n";
cout << "</head>\n";
cout << "<body>\n";

form_iterator fi = formData.getElement("dropdown");
if( !fi->isEmpty() && fi != (*formData).end()) {
cout << "Value Selected: " << **fi << endl;
}

cout << "<br/>\n";


cout << "</body>\n";
cout << "</html>\n";

return 0;
}

S dng Cookie trong CGI


HTTP Protocol l mt giao thc Stateless. Nhng vi mt Website thng mi, n l cn thit
duy trnh thng tin session gia cc trang khc nhau. V d, mt tin trnh ng k ca ngi s
dng c th kt thc sau khi hon thnh qua nhiu trang. Nhng cch duy tr thng tin session
ca ngi dng khi h duyt qua nhiu trang l nh th no.
Trong nhiu tnh hung, s dng Cookie l phng thc hiu qu nht ghi nh v theo du vic
t hng, mua hng, hng ha a thch,

Cch n lm vic
Server ca bn gi mt s d liu ti trnh duyt khch truy cp trong form ca mt Cookie. Trnh
duyt c th chp nhn Cookie ny. Nu n chp nhn, n c lu gi dng mt bn ghi thun
vn bn trn Hard drive ca khch truy cp. By gi, khi khc truy cp ti trang khc trn site ca
bn, Cookie ny l c sn thu hi. Khi c thu hi, Server ca bn bit/nh nhng g c lu
gi:
Cookie l mt bn ghi d liu thun vn bn ca 5 trng bin:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 189

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Expires : Ngy m Cookie s ht hn. Nu trng, Cookie s ht hn khi khch truy cp


thot khi trnh duyt.

Domain : Tn min ca site ca bn

Path : Path ti th mc hoc Webpage m thit lp Cookie . N c th l trng nu bn


mun thu nhn Cookie t bt k th mc hoc trang no.

Secure : Nu trng ny cha t secure, th Cookie ch c th c thu hi vi mt


Secure Server. Nu trng ny trng, s khng tn ti hn ch no.

Name=Value : Cookie c thit lp v thu hi trong form cc cp key/value.

Thit lp Cookie
Rt d dng gi Cookie ti trnh duyt. Nhng Cookie ny c gi cng vi HTTP Header
trc trng Content-type. Gi s bn mun thit lp UserID v Password dng Cookie. Th
thit lp Cookie s c thc hin nh sau:
#include <iostream>
using namespace std;

int main ()
{

cout << "Set-Cookie:UserID=XYZ;\r\n";


cout << "Set-Cookie:Password=XYZ123;\r\n";
cout << "Set-Cookie:Domain=www.tutorialspoint.com;\r\n";
cout << "Set-Cookie:Path=/perl;\n";
cout << "Content-type:text/html\r\n\r\n";

cout << "<html>\n";


cout << "<head>\n";
cout << "<title>Cookies in CGI</title>\n";
cout << "</head>\n";
cout << "<body>\n";

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 190

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

cout << "Setting cookies" << endl;

cout << "<br/>\n";


cout << "</body>\n";
cout << "</html>\n";

return 0;
}

T v d ny, bn phi hiu cch thit lp Cookie. Chng ta s dng HTTP Header l SetCookie thit lp cc Cookie.
y, n l ty thit lp cc thuc tnh ca Cookie nh Expires, Domain, v Path. Bn nh
rng, Cookie c thit lp trc khi gi dng sau: "Content-type:text/html\r\n\r\n.
Bin dch chng trnh trn to setcookies.cgi. N s thit lp 4 Cookie ti my tnh ca bn.

Thu hi Cookie
Vic thu hi tt c Cookie thit lp l kh d dng. Cookie c lu gi trong bin mi trng
CGI l HTTP_COOKIE v chng s c form sau:
key1=value1;key2=value2;key3=value3....

Di y l v d v cch thu hi cc Cookie:


#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <stdlib.h>

#include <cgicc/CgiDefs.h>
#include <cgicc/Cgicc.h>
#include <cgicc/HTTPHTMLHeader.h>
#include <cgicc/HTMLClasses.h>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 191

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

using namespace std;


using namespace cgicc;

int main ()
{
Cgicc cgi;
const_cookie_iterator cci;

cout << "Content-type:text/html\r\n\r\n";


cout << "<html>\n";
cout << "<head>\n";
cout << "<title>Cookies in CGI</title>\n";
cout << "</head>\n";
cout << "<body>\n";
cout << "<table border = \"0\" cellspacing = \"2\">";

// get environment variables


const CgiEnvironment& env = cgi.getEnvironment();

for( cci = env.getCookieList().begin();


cci != env.getCookieList().end();
++cci )
{
cout << "<tr><td>" << cci->getName() << "</td><td>";
cout << cci->getValue();
cout << "</td></tr>\n";
}
cout << "</table><\n";

cout << "<br/>\n";


cout << "</body>\n";
cout << "</html>\n";

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 192

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

return 0;
}

By gi, bin dch chng trnh trn to getcookies.cgi, v th ly danh sch tt c Cookie c
sn ti my tnh ca bn.
N s cho mt danh sch gm 4 Cookie c thit lp phn trc v tt c Cookie khc
c thit lp ti my tnh ca bn:
UserID XYZ
Password XYZ123
Domain www.tutorialspoint.com
Path /perl

V d v File Upload
ti mt file ln, HTML code phi c thuc tnh enctype c thit lp l multipart/form-data.
Th input vi kiu file ny s to mt nt Browse.
<html>
<body>
<form enctype="multipart/form-data"
action="/cgi-bin/cpp_uploadfile.cgi"
method="post">
<p>File: <input type="file" name="userfile" /></p>
<p><input type="submit" value="Upload" /></p>
</form>
</body>
</html>

Kt qu ca code trn s l form sau:


File:
Upload

Ghi ch: V d trn b v hiu ha trnh ngi dng Upload file ln Server ca chng ti.
Nhng bn c th th code trn vi Server ca bn.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 193

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

y l chng trnh cpp_uploadfile.cpp x l upload file:


#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <stdlib.h>

#include <cgicc/CgiDefs.h>
#include <cgicc/Cgicc.h>
#include <cgicc/HTTPHTMLHeader.h>
#include <cgicc/HTMLClasses.h>

using namespace std;


using namespace cgicc;

int main ()
{
Cgicc cgi;

cout << "Content-type:text/html\r\n\r\n";


cout << "<html>\n";
cout << "<head>\n";
cout << "<title>File Upload in CGI</title>\n";
cout << "</head>\n";
cout << "<body>\n";

// get list of files to be uploaded


const_file_iterator file = cgi.getFile("userfile");
if(file != cgi.getFiles().end()) {
// send data type at cout.
cout << HTTPContentHeader(file->getDataType());
// write content at cout.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 194

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

file->writeToStream(cout);
}
cout << "<File uploaded successfully>\n";
cout << "</body>\n";
cout << "</html>\n";

return 0;
}

V d trn ang vit ni dung ti cout stream, nhng bn c th m file stream ca bn v gi ni


dung ca upload file trong mt file ti v tr mong mun.

Th vin Template chun (STL) trong


C++
Hy vng bn hiu khi nim v Template trong C++ c chng ti trnh by trong chng
v Template. Standard Tamplate Library (STL) trong C++ l mt tp hp cc lp Template mnh
m trong C++ cung cp cc lp v cc hm c to theo khun mu cho mc ch lp trnh
tng qut, m trin khai nhiu thut ton v cu trc d liu c s dng ph bin v thng dng
nh vector, list, queue v stack.
C ba thnh phn mang tnh cu trc mnh m ca Standard Tamplate Library (STL) trong C++ l:
Thnh phn

Miu t

Containers

Containers c s dng qun l cc tp hp i tng ca


mt kiu c th. C mt s kiu Containers khc nhau nh list,
vector, map,

Algorithms

Algorithms hot ng trn containers. Chng cung cp cc


phng thc m theo bn s thc hin vic khi to, sp
xp, tm kim ni dung ca Containers

Iterators

Iterators c s dng duyt qua cc phn t trong tp hp


cc i tng. Nhng tp hp ny c th l Containers hoc
Subset ca Containers

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 195

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Chng ta s cp v 3 thnh phn ca STL trong C++ trong chng tip theo khi bn lun v
Th vin chun C++ (C++ Standard Library). By gi, bn ghi nh rng, 3 thnh phn ny c mt
tp hp cc hm c nh ngha trc, m gip chng ta trong vic thc hin cc tc v phc tp
tr nn n gin hn.
Xt v d sau minh ha vector containers (l mt Template chun trong C++), m ging nh mt
mng vi mt exception m t ng x l cc nhu cu v storage ca ring n khi n cn:
#include <iostream>
#include <vector>
using namespace std;

int main()
{
// create a vector to store int
vector<int> vec;
int i;

// display the original size of vec


cout << "vector size = " << vec.size() << endl;

// push 5 values into the vector


for(i = 0; i < 5; i++){
vec.push_back(i);
}

// display extended size of vec


cout << "extended vector size = " << vec.size() << endl;

// access 5 values from the vector


for(i = 0; i < 5; i++){
cout << "value of vec [" << i << "] = " << vec[i] << endl;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 196

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

// use iterator to access the values


vector<int>::iterator v = vec.begin();
while( v != vec.end()) {
cout << "value of v = " << *v << endl;
v++;
}

return 0;
}

Khi code trn c bin dch v thc thi, n cho kt qu sau:


vector size = 0
extended vector size = 5
value of vec [0] = 0
value of vec [1] = 1
value of vec [2] = 2
value of vec [3] = 3
value of vec [4] = 4
value of v = 0
value of v = 1
value of v = 2
value of v = 3
value of v = 4

Di y l cc im quan trng cn ghi nh lin quan ti cc hm a dng c s dng


trong v d trn:

Hm thnh vin push_back() chn gi tr ti phn cui ca vector, m rng kch c ca n


khi cn.

Hm size() hin th kch c ca vector.

Hm begin() tr v mt iterator ti phn u ca vector.

Hm end() tr v mt interator ti phn cui ca vecor.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 197

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

Th vin chun C++ (C++ Standard


Library)
Th vin chun C++ (C++ Standard Library) c th chia thnh hai phn:

Th vin hm chun trong C++ (Standard Function Library): Th vin ny gm cc


hm mang mc ch tng qut m khng l mt phn ca bt k lp no. Th vin hm
chun l k tha t C.

Th vin lp hng i tng trong C++ (Object Oriented Class Library): y l mt


tp hp ca cc lp v cc hm lin kt.

Th vin chun C++ cng kt hp cht ch Th vin chun C, vi mt s b sung v thay i nh


h tr tnh an ton kiu (type safety).

Th vin hm chun trong C++ (Standard Function


Library)
Th vin hm chun trong C++ c phn chia thnh:

I/O

X l chui v k t

Ton hc

Date, Time v v tr

Cp pht ng

Hn hp

Cc hm cho wide-character

Th vin lp hng i tng trong C++ (Object


Oriented Class Library)
Th vin hng i tng chun C++ nh ngha mt tp hp rng ri cc lp m cung cp s h
tr cho cc hot ng ph bin, gm x l I/O, String, s. Th vin ny bao gm:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 198

http://vietjack.com/cplusplus/index.jsp

Cc lp I/O chun C++

Lp String

Lp thuc s

Lp STL Container

Lp STL Algorithm

Cc i tng STL Function

STL Iterator

STL Allocator

Th vin Localization

Cc lp Exception Handling

Th vin h tr hm hn hp

Copyright vietjack.com

Ti liu tham kho C++


Di y l cc ngun cha cc ti liu tham kho v C++ hu ch. Mong bn s dng chng
hiu su hn cc khi nim c trnh by trong lot bi ny.

Link hu ch v C++

Tutorialspoint Lot bi hng dn ca chng ti xy dng da trn ngun ny.

C++ Programming Language Tutorials Lot bi hng dn v Ngn ng lp trnh C++

C++ Programming Sch ny v C++ v tnh tng tc ca n vi thit k phn mm v


s s dng ngn ng C++ trong cuc sng thc.

C++ FAQ Cu hi thng xuyn v C++

Free Country Cung cp source code v C++ min ph v th vin C++ cho mt s
chng trnh nh lp trnh game, th vin Template chun v lp trnh GUI.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 199

http://vietjack.com/cplusplus/index.jsp

Copyright vietjack.com

C and C++ Users Group Cung cp source code t cc d n v C++ trong cc lnh vc
lp trnh a dng: AI, Animation, Compiler, Database, Debugging, Encryption, Game,
Graphics, GUI,

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 200

You might also like