You are on page 1of 52

LP TRNH HNG I TNG VI C++

Trang 1

MT S TIN CH VA M RNG CA C++ SO
VI C

MC TIU CA BI NY GIP NGI HC
Nhp/xut d liu s dng ton t cin v cout
Vit ch thch trn mt dng, khai bo bin mi ni, cp pht v thu hi b nh
ng s dng ton new v delete,
Gii cc bi tp c s dng k thut chng hm, thm s ngm nh.

A/ TM TT L THUYT
- C++ l mt s mi rng ca C, do c th s dng mt chng trnh bin dch
C++ dch v thc hin cc chng trnh vit bng C
- C yu cu cc ch thch nm gia /* v */. C++ cho php to mt ch thch bt u
bng // cho n ht dng
- C++ cho php khai bo tu . Thm ch c th khai bo bin trong phn khi to
ca cu lnh lp for
- C++ cho php truyn tham s cho hm bng tham chiu. iu ny tng t nh
truyn tham bin cho chng trnh con trong ngn ng lp trnh PASCAL. Trong li gi
hm ta dng tn bin v bin s c truyn cho hm qua tham chiu. iu cho
php thao tc trc tip trn bin c truyn ch khng phi gin tip qua bin tr.
- Ton t new v delete trong C++ c dng qun l b nh ng thay v cc
hm cp pht ng ca C
- C++ cho php ngi vit chng trnh m t cc gi tr ngm nh cho cc tham s
ca hm, nh hm c th c gi vi mt danh sch cc tham s khng .
- Ton t :: cho php truy nhp bin ton cc khi ng thi s dng bin cc b v
ton cc cng tn.
- C th nh ngha cc hm cng tn vi cc tham s khc nhau. Hai hm cng tn
s c phn bit nh gi tr tr v v danh sch kiu cc tham s.
B. MT S LU (Cc li thng gp, mt s thi quen lp trnh tt...)
Cc li thng gp
Qun ng */ cho cc ch thch
Khai bo bin sau khi bin c s dng
S dng lnh return tr v gi tr nhng khi nh ngha hm li m t hm kiu
void hoc ngc li, qun cu lnh ny trong trng hp hm yu cu gi tr tr v.
Khng c hm nguyn mu cho cc hm
B qua khi to cho cc bin tham chiu
Thay i gi tr ca cc hng
To cc hm cng tn, cng tham s.
Mt s thi quen lp trnh tt
S dng // trnh li khng ng */ khi ch thch nm gn trong mt dng.
S dng cc kh nng vo ra mi ca C++ chng trnh d c hn.
t cc khai bo bin ln u khi lnh.
Ch dng t kho inline vi cc hm nh,khng phc tp.
S dng con tr truyn tham s cho hm khi cn thay i gi tr tham s, cn
tham chiu dng truyn cc tham s c kch thc ln m khng c nhu cu
thay i ni dung.
Trnh s dng bin cng tn cho nhiu mc ch khc nhau trong chng trnh.
LP TRNH HNG I TNG VI C++


Trang 2
C/ BI TP MU
V d 1: C++ chp nhn hai kiu ch thch. Cc lp trnh vin bng C quen vi
cch ch thch bng /**/. Trnh bin dch s b qua mi th nm gia /**/.
Xt chng trnh sau :
CT1_1.CPP


/*
Chng trnh in cc s t 0 n 9.
*/
#include <iostream.h>
void main()
{
int I;
for(I = 0; I < 10 ; ++ I)// 0 - 9
cout<<I<<"\n"; // In ra 0 - 9
}
1.

2.


Mi th nm gia /**/ t dng 1 n dng 3 u c chng trnh b qua.
Chng trnh ny cn minh ha cch ch thch th hai. l cch ch thch bt
u bng // dng 8 v dng 9.
kt qu

Ni chung, kiu ch thch /**/ c dng cho cc khi ch thch ln gm nhiu
dng, cn kiu // c dng cho cc ch thch mt dng.

V d 2: Chng trnh nhp vo hai s. Tnh tng v hiu ca hai s va nhp.


CT1_2.CPP


#include <iostream.h>
void main()
{
int X, Y;
cout<< "Nhap vao mot so X:";

LP TRNH HNG I TNG VI C++


Trang 3
cin>>X;
cout<< "Nhap vao mot so Y:";
cin>>Y;
cout<<"Tong cua chung:"<<X+Y<<"\n";
cout<<"Hieu cua chung:"<<X-Y<<"\n";
}





V d 3:
S dng ton t xut nhp vit thc n cho chng trnh:
CT1_2.CPP


#include <iostream.h>
void menu()
{
cout<< Menu \n;
cout<<1. Cong viec 1\n;
cout<<2. Cong viec 2\n;
cout<<3. Cong viec 3\n;
cout<<4. Ket thuc chuong trinh \n\n;
}
void main()
{
int lc;
do
{
// viet menu len man hinh
menu();
//lay lua chon
cout<<Ban hay chon cong viec can thuc hien:1->4;cin>>lc;
switch(lc)
{
case 1:cout<<Thuc hien cong viec 1\n; break;
case 2:cout<<Thuc hien cong viec 2\n; break;
case 3:cout<<Thuc hien cong viec 3\n; break;
}
//lap cho den khi nguoi su dung lua chon 4
} while(lc!=4);
}






V d 4:
Tm li sai ca on chng trnh sau:
int n;
cin>>n;
for(int i=0;i<n;i++)
{ int a[100];
cin>>a[i];
}
for(i=0;i<n;i++)
cout<<a[i];
Li gi
Chng trnh b li trong vng for th hai do bin mng a khng c nh ngha.
Mng a c khai bo trong vng for th nht ch c tm hot ng trong vng for
mi thi. Do vy, chng trnh khng th bit trong vng lp for th hai. Ch
LP TRNH HNG I TNG VI C++


Trang 4
bin nguyn i c khai bo trong dng lnh for c v tr tng ng vi vic khai
bo i bn ngoi for. V vy, trong vng for th hai ta s dng bin i nhng chng
trnh khng bo li.
V d 5:
Tm li sai cho cc khai bo prototype hm di y (cc hi ny c khai bo
trong cng mt chng trnh)
int func1(int); // (1)
float func1(int); // (2)
int func1(float); //(3)
void func1(int=0,int); //(4)
void func2(int,int=0); //(5)
void func2(int); //(6)
void func2(float); //(7)
Li gi:
Trong nh ngha chng hm, trnh bin dch phn bit cc hm bi kiu d liu tr
ra ca hm m ch phn bit bi danh sch tham s ca hm. Do vy hm 1 v hm 2
b nh ngha chng ln nhau v trnh bin dch bo li. Gia hm 2 v hm 3 khng c
li bi chng khc nhau bi kiu d liu ca tham s. Trong hm 4 ta s dng sai
cch truyn gi tr mc nh cho tham s. Khng bo gi truyn gi tr mc nh cho
mt tham s trc mt tham s khng c truyn gi tr ngm nh.
Trong cch nh ngha hai hm 5 v 6 c s nhp nhng. Khi ta gi hm func2 vi
tham s l mt s nguyn th trnh bin dch khng bit l s gi hm 5 hay hm 6 bi
v c hai hm ny u c. Trong trng hp ny trnh bin dch cng thng bo li.
V d 6:
Tm li sai(li c php v b nh) cho chng trnh sau:
int & refl()
{
int a=5;
return a;
}
int & r2(int a)
{
a++;
return a;
}
int & ref3(int & a)
{
a++;
return a;
}
int a=5;
int &r1;
int & r2=22;
int &r3=a;
int &r4=ref3(5);
int &r5=ref3(a);
Tr li:
Trong cc hm c kt qu tr v l mt tham chiu, chng ta lun phi ch rng
bin c tr li c gi tr l tham chiu khng b xo khoi b nh chng trnh khi kt
thc thc hin hm. Do vy hai hm ref1 v ref2 l sai bi v n tr v tham chiu ti
bin m a li l bin cc b trong ref1 v l tham s trong ref2 ch c to ra tm thi
LP TRNH HNG I TNG VI C++


Trang 5
trn stack khi gi hm v xo khi stack khi kt thc hm. Hm ref3 khng c li v a l
mt tham chiu ti mt bin khng nm trong hm.
Trong khi bo cc tham chiu phi c gn vi mt bin no trong b nh. Do
vy cc khai bo r1, r2 l sai. Li gi ref3(5) cng l sai bi v tham s cho hm phi l
tham chiu n mt bin, trong khi ta li truyn vo hng s.
V d 7:
Cho bit kt qu thc hin chng trnh sau:
#include <iostream.h>
int & foo(int &a,int b)
{
b+=a;
if (b>5) a++;
return a;
}
void main()
{
int i=2,j=4;
int k=foo(i,j);
k++;
cout<<i<< <<j<< <<k<<endl;
int &l=foo(i,j);
l++ ;
cout<<i<< <<j<< <<l<<endl;
}
Li gi:
Trong chng trnh trn cn ch hai im. Thi nht l ta truyn vo cho hm
tham chiu ca bin i ch khng phi bin i. Do vy, mi thay i ca tham s ny
trong hm l thay i ti bin i c tham chiu ti. Tng t nh vy vi tham chiu
l. Tham chiu l c xc lp bng tham chiu tr ra ca hm chnh l tham chiu ti
bin i. Do vy mi thay i l chnh l thay i i.
V d 8:
Vit mt hm hoanvi dng hon v hai s nguyn. Sau vit chng trnh nhp
v sp xp mt mng s nguyn.
Tr li:
CT1_8.CPP


#include <iostream.h>
void hoanvi(int &a,int &b)
{
int tam=a; a=b; b=tam;
}
void main()
{
// Nhap du lieu
int n;
cout<< Ban hay cho so phan tu cua mang n=;cin>>n;
//Cap phat bo nho cho mang
int *a=new int(n);
cout<<\n Hay nhap gia tri cho cac phan tu cua mang \n;
for(int i=0;i<n;++i)
{
cout<<a[<<i<<]=;cin>>a[i];
}
// Sap xep
for(i=0;i<n-1;i++)
for(int j=i++;j<n;j++)

LP TRNH HNG I TNG VI C++


Trang 6
if (a[i]>a[j]) hoanvi(a[i],a[j]);
// In ket qua
cout<<\n Cac phan tu cua mang sau khi da sap xep la \n;
for(i=0;i<n;i++)
cout<<a[i]<< ;
delete a;
}





V d 9: Chng trnh to mt mng ng, khi ng mng ny vi cc gi tr ngu
nhin v sp xp chng.
CT1_9.CPP


#include <iostream.h>
#include <time.h>
#include <stdlib.h>
void main()
{
int N;
cout<<"Nhap vao so phan tu cua mang:";
cin>>N;
int *P=new int[N];
if (P==NULL)
{
cout<<"Khong con bo nho de cap phat\n";
}
srand((unsigned)time(NULL));
for(int I=0;I<N;++I)
P[I]=rand()%100; //To cc s ngu nhin t 0 n 99
cout<<"Mang truoc khi sap xep\n";
for(I=0;I<N;++I)
cout<<P[I]<<" ";
for(I=0;I<N-1;++I)
for(int J=I+1;J<N;++J)
if (P[I]>P[J])
{
int Temp=P[I];
P[I]=P[J];
P[J]=Temp;
}
cout<<"\nMang sau khi sap xep\n";
for(I=0;I<N;++I)
cout<<P[I]<<" ";
delete []P;
}





kt qu

LP TRNH HNG I TNG VI C++


Trang 7
V d 10: Chng trnh cng hai ma trn trong mi ma trn c cp pht
ng.
Chng ta c th xem mng hai chiu nh mng mt chiu nh hnh 1.2 di y

Hnh 1.2: Mng hai chiu c th xem nh mng mt chiu.
Gi X l mng hai chiu c kch thc m dng v n ct.
A l mng mt chiu tng ng.
Nu X[i][j] chnh l A[k] th k = i*n + j
Chng ta c chng trnh nh sau :
CT1_10.CPP


#include <iostream.h>
#include <conio.h>
//prototype
void AddMatrix(int * A,int *B,int*C,int M,int N);
int AllocMatrix(int **A,int M,int N);
void FreeMatrix(int *A);
void InputMatrix(int *A,int M,int N,char Symbol);
void DisplayMatrix(int *A,int M,int N);
int main()
{
int M,N;
int *A = NULL,*B = NULL,*C = NULL;
clrscr();
cout<<"Nhap so dong cua ma tran:";
cin>>M;
cout<<"Nhap so cot cua ma tran:";
cin>>N;
//Cp pht vng nh cho ma trn A
if (!AllocMatrix(&A,M,N))
{ //endl: Xut ra k t xung dng (\n)
cout<<"Khong con du bo nho!"<<endl;
return 1;
}
//Cp pht vng nh cho ma trn B
if (!AllocMatrix(&B,M,N))
{

LP TRNH HNG I TNG VI C++


Trang 8
cout<<"Khong con du bo nho!"<<endl;
FreeMatrix(A);//Gii phng vng nh A
return 1;
}
//Cp pht vng nh cho ma trn C
if (!AllocMatrix(&C,M,N))
{
cout<<"Khong con du bo nho!"<<endl;
FreeMatrix(A);//Gii phng vng nh A
FreeMatrix(B);//Gii phng vng nh B
return 1;
}
cout<<"Nhap ma tran thu 1"<<endl;
InputMatrix(A,M,N,'A');
cout<<"Nhap ma tran thu 2"<<endl;
InputMatrix(B,M,N,'B');
clrscr();
cout<<"Ma tran thu 1"<<endl;
DisplayMatrix(A,M,N);
cout<<"Ma tran thu 2"<<endl;
DisplayMatrix(B,M,N);
AddMatrix(A,B,C,M,N);
cout<<"Tong hai ma tran"<<endl;
DisplayMatrix(C,M,N);
FreeMatrix(A);//Gii phng vng nh A
FreeMatrix(B);//Gii phng vng nh B
FreeMatrix(C);//Gii phng vng nh C
return 0;
}
//Cng hai ma trn
void AddMatrix(int *A,int *B,int*C,int M,int N)
{
for(int I=0;I<M*N;++I)
C[I] = A[I] + B[I];
}
//Cp pht vng nh cho ma trn
int AllocMatrix(int **A,int M,int N)
{
*A = new int [M*N];
if (*A == NULL)
return 0;
return 1;
}
//Gii phng vng nh
void FreeMatrix(int *A)
{
if (A!=NULL)
delete [] A;
}
//Nhp cc gi tr ca ma trn
void InputMatrix(int *A,int M,int N,char Symbol)
{
for(int I=0;I<M;++I)
for(int J=0;J<N;++J)
{
cout<<Symbol<<"["<<I<<"]["<<J<<"]=";
cin>>A[I*N+J];
}
}
//Hin th ma trn
void DisplayMatrix(int *A,int M,int N)
{
LP TRNH HNG I TNG VI C++


Trang 9
for(int I=0;I<M;++I)
{
for(int J=0;J<N;++J)
{
out.width(7);//Hien thi canh le phai voi chieu dai 7 ky tu
cout<<A[I*N+J];
}
cout<<endl;
}
}




kt qu

D/ BI TP T GII

Cu hi trc nghim

Cu 1: Cho bit gi tr ca k sau khi thc hin on chng trnh
int i=5,k;
{
int i=6;
::i--;
k=i;
}
k-=i;

Vi cc kt qu:
a) k=0 b) k=1 c) k=2 d)k=3
Cu 2: Tm li gi hm sai cho hm sau:
void func(int i=0,int j=0);
a)func()
b)dunc(1);
LP TRNH HNG I TNG VI C++


Trang 10
c)func(1.5,2.5);
d)func(1,2);
Cu 3: Cho bit gi tr ca y sau khi thc hin:
int &foo(int &a)
{ a++;
return a;
}
int i=5;
int &r=foo(i);
r++;

a) i=5;
b) i=6;
c) i=7;
d) khng cu no ng
Cu 4: Tm gi tr ca x, y:
void test(int &a, int b)
{ a+=b;
b=a;
}
int x=1,y=2;
test(x,y);

a) x=1,y=2;
b) x=1,y=3
c) x=3,y=2
d) x=3,y=3

Bi tp t gii
Bi 1.1: Anh (ch) hy vit li chng trnh sau bng cch s dng li cc dng
nhp/xut trong C++.
/*
Chng trnh tm mu chung nh nht
*/
#include <stdio.h>
void main()
{
int a,b,i,min;
printf("Nhap vao hai so:");
scanf("%d%d",&a,&b);
min=a>b?b:a;
LP TRNH HNG I TNG VI C++


Trang 11
for(i = 2;i<min;++i)
if (((a%i)==0)&&((b%i)==0)) break;
if(i==min)
{
printf("Khong co mau chung nho nhat");
}
printf("Mau chung nho nhat la %d\n",i);
}
Bi 1.2: Vit chng trnh nhp vo s nguyn dng h (2<h<23), sau in ra cc tam
gic c chiu cao l h nh cc hnh sau:

Bi 1.3: Mt tam gic vung c th c tt c cc cnh l cc s nguyn. Tp ca ba s
nguyn ca cc cnh ca mt tam gic vung c gi l b ba Pitago. l tng bnh
phng ca hai cnh bng bnh phng ca cnh huyn, chng hn b ba Pitago (3,
4, 5). Vit chng trnh tm tt c cc b ba Pitago nh th sao cho tt c cc cnh
khng qu 500.
Bi 1.4: Vit chng trnh in bng ca cc s t 1 n 256 di dng nh phn, bt
phn v thp lc phn tng ng.
Bi 1.5: Vit chng trnh nhp vo mt s nguyn dng n. Kim tra xem s nguyn
n c thuc dy Fibonacci khng?
Bi 1.6: Vit chng trnh nhn hai ma trn Amxn

v Bnxp. Mi ma trn c cp pht
ng v cc gi tr ca chng pht sinh ngu nhin (Vi m, n v p nhp t bn phm).
LP TRNH HNG I TNG VI C++


Trang 12
Bi 1.7: Vit chng trnh to mt mng mt chiu ng c kch thc l n (n nhp t
bn phm). Cc gi tr ca mng ny c pht sinh ngu nhin trn on [a, b] vi a
v b u nhp t bn phm. Hy tm s dng nh nht v s m ln nht trong mng;
nu khng c s dng nh nht hoc s m ln nht th xut thng bo "khng c s
dng nh nht" hoc "khng c s m ln nht".
Bi 1.8: Anh (ch) hy vit mt hm tnh bnh phng ca mt s. Hm s tr v gi tr
bnh phng ca tham s v c kiu cng kiu vi tham s.
Bi 1.9: Trong ngn ng C, chng ta c hm chuyn i mt chui sang s, ty thuc
vo dng ca chui chng ta c cc hm chuyn i sau :
int atoi(const char *s);
Chuyn i mt chui s thnh s nguyn kiu int.
long atol(const char *s);
Chuyn i mt chui s thnh s nguyn kiu long.
double atof(const char *s);
Chuyn i mt chui s thnh s thc kiu double.
Anh (ch) hy vit mt hm c tn l aton (ascii to number) chuyn i chui
sang cc dng s tng ng.
Bi 1.10: Anh ch hy vit cc hm sau:
Hm ComputeCircle() tnh din tch s v chu vi c ca mt ng trn
bn knh r. Hm ny c prototype nh sau:
void ComputeCircle(float & s, float &c, float r = 1.0);
Hm ComputeRectangle() tnh din tch s v chu vi p ca mt hnh
ch nht c chiu cao h v chiu rng w. Hm ny c prototype nh sau:
void ComputeRectangle(float & s, float &p, float h = 1.0, float w =
1.0);
Hm ComputeTriangle() tnh din tch s v chu vi p ca mt tam gic
c ba cnh a,b v c. Hm ny c prototype nh sau:
void ComputeTriangle(float & s, float &p, float a = 1.0, float b = 1.0,
float c = 1.0);
Hm ComputeSphere() tnh th tch v v din tch b mt s ca mt
hnh cu c bn knh r. Hm ny c prototype nh sau:
void ComputeSphere(float & v, float &s, float r = 1.0);
LP TRNH HNG I TNG VI C++


Trang 13
Hm ComputeCylinder() tnh th tch v v din tch b mt s ca mt
hnh tr c bn knh r v chiu cao h. Hm ny c prototype nh sau:
void ComputeCylinder(float & v, float &s, float r = 1.0 , float h =
1.0);
Bi 1.11: Vit chng trnh qun l im hc sinh vi cu trc danh sch ni n.
Trong chng trnh s dng ton t vo ra v ton t new cp pht b nh ng.
Bi 1.12: Vit mt hm thc hin vic sp xp mt mng s nguyn theo chiu tng
dn hoc gim dn. Hm ny t ng mc nh kiu sp xp theo chiu tng dn.
Bi 1.13: Vit mt hm gii phng trnh bc hai. Hm ny tr li thng bo rng
phng trnh c nghim hay khng c nghim kp. Nu c nghim th nghim s c
lu vo tham s x1, x2 v c truyn nh l tham bin.
Bi 1.14:Vit mt hm tm v tr xut hin u tin ca mt t kho trong mt xu. Hm
ny tr li v tr tm thy ca t kho trong xu(bt u t 0) v thay i con tr xu
c truyn vo thnh v tr ca k t ngay sau k t cui cng ca t kho. T kho
cn tm c a vo nh l mt tham s v c mt gi tr mc nh.
LP TRNH HNG I TNG VI C++


Trang 14


I TNG VA LP (CLASS AND OBJECT)


MC TIU CA BI NY GIP NGI HC
Phn tch c khi nim ng gi d liu
Khai bo v s dng mt lp
Khai bo v s dng i tng.
S dng hm thit lp v hm hu b
Khai bo v s dng hm thit lp sao chp
Vai tr ca hm thit lp ngm nh

A/ NHC LI L THUYT
Trong C++, tn cu trc l mt kiu d liu khng cn km theo t kho struct.
Lp cho php ngi lp trnh m t cc i tng thc t vi cc thuc tnh v hnh
vi. Trong C++ thng s dng t kho class khai bo mt lp. Tn lp l mt kiu
d liu dng khi khai bo cc i tng thc lp(cc th hin c th ca lp).
Thuc tnh ca i tng trong mt lp c m t di dng cc bin th hin.
Cc hnh vi l cc hm thnh phn bn trong lp.
C hai cch nh ngha cc hm thnh phn ca mt lp; khi nh ngha hm thnh
phn bn ngoi khai bo lp phi t trc tn hm thnh phn tn ca lp v ton t
:: phn bit vi cc hm t do cng tn. Ch nn nh ngha hm thnh phn bn
trong khai bo lp khi n khng qu phc tp cho chng trnh d c.
C th khai bo v s dng cc con tr i tng, tham chiu i tng.
Hai t kho public v private dng ch nh thuc tnh truy nhp cho cc thnh
phn( d liu/hm) khai bo bn trong lp.
Thnh phn bn trong lp c khai bo public c th truy nhp t mi hm khai
bo mt i tng thuc lp .
Thnh phn private trong mt i tng ch c th truy nhp c bi cc hm
thnh phn ca i tng hoc cc hm thnh phn ca lp dng to i tng(
y tnh c trng hp i tng l tham s ca hm thnh phn)
Hai hm thnh phn c bit ca mt lp gi l hm thit lp v hm hu b. Hm
thit lp c gi t ng(ngm nh) mi khi mt i tng c to ra v hm hu
b c gi t ng khi i tng ht thi gian s dng.
Hm thit lp c thuc tnh public, cng tn vi tn lp nhng khng c gi tr tr
v.
Mt lp c t nht hai hm thit lp: hm thit lp sao chp ngm nh v hm thit
lp do ngi lp trnh thit lp(nu khng m t tng minh th l hm thit lp
ngm nh).
Hm hu b cng c thuc tnh public, khng tham s, khng gi tr tr v v c tn
bt u bi ~ theo sau l tn ca lp.
Bn trong phm v lp( nh ngha ca cc hm thnh phn), cc thnh phn ca lp
c gi theo tn. Trng hp c mt i tng ton cc cng tn, mun xc nh i
tng y phi s dng ton t ::.
Lp c th cha cc thnh phn d liu l cc i tng ca lp khc. Cc i
tng ny phi c khi to trc i tng tng ng ca lp bao.
Mi i tng c mt con tr ch n bn thn n, ta gi l con tr this. Con tr
ny c th c s dng tng minh hoc ngm nh tham xc nh cc thnh
phn bn trong i tng. Thng thng ngi ta s dng this di dng ngm nh.
Hm bn ca mt lp l hm khng thuc lp nhng c quyn truy nhp ti cc
thnh phn private ca lp.
LP TRNH HNG I TNG VI C++


Trang 15
Khai bo bn b c th khai bo bt k ch no trong khai bo lp.
B. MT S LU (Cc li thng gp, mt s thi quen lp trnh tt...)
Cc li thng gp
Qun du ; cui khai bo lp
Khi to cc thnh phn gi tr trong khai bo lp
nh ngha chng mt hm thnh phn bng mt hm khng thuc lp
Truy nhp n cc thnh phn ring ca lp t bn ngoi phm vi lp
Khai bo gi tr tr v cho hm thit lp v hm hu b
Khai bo hm hu b c tham s, nh ngha chng hm hu b
Gi tng minh hm thit lp v hm hu b
Gi cc thm thnh phn bn trong hm thit lp
Mt s thi quen lp trnh tt
Nhm tt cc cc thnh phn c cng thuc tnh truy nhp mt ni trng khi
bo lp, nh vy mi t kho m t truy nhp ch c xc nh mt ln. Khai bo
lp v vy d c hn. Theo kinh nghim, cc thnh phn private trc tin ri
n cc thnh phn protectech, cui cng l t kho public.
nh ngha tt c cc hm thnh phn bn ngoi khai bo lp. iu ny nhm phn
bit gia hai phn giao din v phn ci t lp.
S dng cc tin x l #ifndef, #define, #endif cho cc tp tin tiu ch xut
hin mt ln bn trong chng trinhg ngun.
Phi nh ngha cc hm thit lp m bo rng cc i tng u c khi
to ni dung mt cch ng n.
C/ BI TP MU
V d 1: nh ngha mt lp m t v x l cc im trn mn hnh ho. Vi tn lp
l point
Li gii
+ Cc thuc tnh ca lp
int x;// honh (ct)
int y;// tung ( hng)
int m;// mu
+ Cc phng thc
Nhp d liu mt im
Hin th mt im
n mt im
Lp im c xy dng nh sau:
class point
{
private:
int x,y,m;
public:
void nhapsl();
void hien();
void an()
{
putpixcel(x,y,getbkcolor());
}
void point::nhap()
{
cout<<\n Nhp honh (ct) v tung (hng) c im:; cin>>x>>y;
cout<< Nhp mu ca im:;cin>>m;
}
void point::hien()
LP TRNH HNG I TNG VI C++


Trang 16
{
int mau_ht;
mau_ht=getcolor();
putpixcel(x,y,m);
setcolor(mau_ht);
}
Nhn xt:
+ Trong c ba phng thc( d vit trong hay vit ngoi nh ngha lp) u c
truy nhp n cc thuc tnh x,y v m ca lp.
+ Cc phng thc vit bn trong nh ngha lp (nh phng thc an()) c
vit nh mt hm bnh thng.
+Khi xy dng cc phng thc bn ngoi lp, cn dng thm tn lp v ton t
phm vi :: t ngay trc tn phng thc quy nh r y l phng thc ca lp
no.

V d 2: Chng ta xy dng kiu cu trc Time vi ba thnh vin s nguyn: Hour,
Minute v second. Chng trnh nh ngha mt cu trc Time gi l DinnerTime.
Chng trnh in thi gian di dng gi qun i v dng chun.

CT2_2.CPP


#include <iostream.h>
class Time
{
public:
Time(); //Constructor
void SetTime(int, int, int); //Thiet lap Hour,
Minute va Second
void PrintMilitary(); //In thoi gian duoi
dang gio quan doi
void PrintStandard(); //In thoi gian duoi
dang chuan
private:
int Hour; // 0 - 23
int Minute; // 0 - 59
int Second; // 0 - 59
};

//Constructor khoi tao moi thanh vien du lieu voi gia tri zero
//Bao dam tat ca cac doi tuong bat dau o trang thai thich hop
Time::Time()
{
Hour = Minute = Second = 0;
}

//Thiet lap mot gia tri Time moi su dung gio quan doi
//Thuc hien viec kiem tra tinh hop le tren cac gia tri du lieu
//Thiet lap ca gia tri khong hop le thanh zero
void Time::SetTime(int H, int M, int S)
{
Hour = (H >= 0 && H < 24) ? H : 0;
Minute = (M >= 0 && M < 60) ? M : 0;
Second = (S >= 0 && S < 60) ? S : 0;
}

//In thoi gian duoi dang gio quan doi
void Time::PrintMilitary()
{
cout << (Hour < 10 ? "0" : "") << Hour << ":"

LP TRNH HNG I TNG VI C++


Trang 17
<< (Minute < 10 ? "0" : "") << Minute << ":"
<< (Second < 10 ? "0" : "") << Second;
}

//In thoi gian duoi dang chuan
void Time::PrintStandard()
{
cout << ((Hour == 0 || Hour == 12) ? 12 : Hour % 12)
<< ":" << (Minute < 10 ? "0" : "") << Minute
<< ":" << (Second < 10 ? "0" : "") << Second
<< (Hour < 12 ? " AM" : " PM");
}


int main()
{
Time T;

cout << "The initial military time is ";
T.PrintMilitary();
cout << endl << "The initial standard time is ";
T.PrintStandard();

T.SetTime(13, 27, 6);
cout << endl << endl << "Military time after SetTime is ";
T.PrintMilitary();
cout << endl << "Standard time after SetTime is ";
T.PrintStandard();

T.SetTime(99, 99, 99); //Thu thiet lap gia tri khong hop
le
cout << endl << endl << "After attempting invalid
settings:"
<< endl << "Military time: ";
T.PrintMilitary();
cout << endl << "Standard time: ";
T.PrintStandard();
cout << endl;
return 0;
}





kt qu

LP TRNH HNG I TNG VI C++


Trang 18
V d 3
Nhp mt ngy thng nm t bn phm sau in ra mn hnh.
Li gii
CT2_3.CPP


#include <iostream.h>
#include <conio.h>
#define FALSE 0
#define TRUE !FALSE
char* Thang[]={"","gieng","hai","ba","bon","nam","sau","bay","tam",
"chin","muoi","muoi mot","chap"};
int NgayThang[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
class CDate
{
private:
int mNgay,mThang,mNam;
int laNamNhuan(int);
public:
void nhap();
int hopLe();
void in();
};
void CDate::nhap()
{
cout<<endl<<"Ngay: ";cin>>mNgay;
cout<<endl<<"Thang: "; cin>>mThang;
cout<<endl<<"Nam: ";cin>>mNam;
}
int CDate::hopLe()
{
if ((mThang<1)||(mThang>12))
return FALSE;
else
{
if ((mNgay>=1)&&(mNgay<=NgayThang[mThang]))
return TRUE;
else if ((mNgay==29)&&laNamNhuan(mNgay))
return TRUE;
else
return FALSE;
}
}
int CDate::laNamNhuan(int nam)
{
if (((nam%400)==0)||(((nam%4)==0)&&((nam%100)!=0)))
return TRUE;
else
return FALSE;
}
void CDate::in()
{
cout<<endl<<"Ban da nhap vao ngay "<<mNgay;
cout<<" thang "<<Thang[mThang];
cout<<" nam "<<mNam;
}
void main()
{
CDate ngay;
ngay.nhap();
if (ngay.hopLe())
ngay.in();
else

LP TRNH HNG I TNG VI C++


Trang 19
cout<<"BAN NHAP NGAY KHONG HOP LE";
getch();
}





V d 4
Ch ra cc cch khai bo i tng c th cho cc lp i tng di y: class A
{
};
class B
{
B(int, int);
public:
B(int=0);
};
class C
{
C(C&);
public:
C();
};
class D
{
public:
D(D&);
};
Li gii
V lp A
Cch 1: S dng hm thit lp ngm nh
A a; hoc A a();
Cch 2: S dng hm thit lp sao chp mc nh. Gi s a l mt i tng ca
lp A c khai bo trc. Ta c th khai bo i tng a1 nh sau:
A a1(a); hoc A a1=a;
Nhn xt:
Khi trong lp khng c mt khai bo hm thit lp no th trnh bin dch t ng
to ra mt hm thit lp mc nh cho lp . Do vy ta c th s dng khai bo i
tng theo cch 1 cho lp A. Hai chch vit khai bo
A a1(a); v A a1=a; l hon ton ging nhau, chng u s dng hm thit lp sao
chp khi to i tng.

V lp B
Cch 1: S dng hm thit lp B(int). V d:
B b(5);
Cch 2: S dng hm thit lp B(int) vi tham s ngm nh l 0.
B b; tng ng vi B b(0);
Cch 3: S dng hm thit lp sao chp tng t nh lp A.
B b1=b;
Nhn xt
Chng ta ch c th khai bo i tng theo cc hm thit lp c thuc tnh quyn
truy nhp l public
LP TRNH HNG I TNG VI C++


Trang 20
Trong hm thit lp cng c th s dng tham s ngm nh ging nh cc hm
thnh phn khc.
V lp C:
Ch c th khai bo i tng theo hm thit lp C() bi v hm thit lp sao chp
c ngi s dng nh ngha v t quyn truy xut l private. Do vy khng th
dng hm thit lp sao chp. V d:
C c;
V lp D:
Khng th khai bo i tng cho lp D bi v trong lp ny ch c hm thit lp sao
chp. Hm thit lp chp mun s dng c th phi c mt i tng ca lp D. Do
vy mun khai bo c mt i tng thuc lp D th trong lp D cn c mt hm
thit lp khc sa chp.
V d 5
C bao nhiu ln hm thit lp sao chp c gi trong on m chng trnh sau:
Widget f(Widget u)
{
Widget v(u);
Widget w=v;
return w;
}
void main()
{
Widget x;
Widget y=f(f(x));
}
Li gii:
Hm thit lp sao chp c gi 7 ln trong on m chng trnh ny. Mi ln gi
hm f i hi 3 ln gi n hm thit lp sao chp: khi tham s truyn vo bng gi tr
u, khi v v w c khi to. Lnh gi th by l khi to y.
V d 6
Cho bit kt qu in ra mn hnh ca chng trnh sau:
Li gii
CT 2_6.CPP


#include <iostream.h>
#include <conio.h>
class A
{
static int count;
public:
A() { count++;}
~A() { count--;}

static void printNum()
{
cout<< Gia tri cua count la:<<count<<endl;
}
};
int A::count=0;
void main()
{
clrscr();
A::printNum();
A a1;
a1.printNum();
A *pa=new A;
a1.printNum();
3.
LP TRNH HNG I TNG VI C++


Trang 21
delete pa;
a1.printNum();
A a2=a1;
a2.printNum();
getch();
}

4.



Li gii
Kt q in ra mn hnh:
Gia tri cua count la 0
Gia tri cua count la 1
Gia tri cua count la 2
Gia tri cua count la 1
Gia tri cua count la 1
Trong lp A, thuc tnh count v hm thnh phn printNum l cc thnh phn tnh
c chia s bi mi i tng ca A. Ban u thuc tnh count c khai bo khi
to l 0( dng int A::count=0), do vy dng u tin ca chng trnh chnh c gi
n phng thc printNum s a ra mn hnh gi tr ca count l 0. Tip theo ta to
mt i tng a1 s dng hm thit lp dng A(). Hm ny lm tng count ln 1. Do
vy, dng gi phng thc printNum tip theo s a ra mn hnh gi tr ca count l
1. Tng t i vi lnh new ta cng to ra mt i tng mi v lc ny gi tr ca
count l 2. Sau khi s dng lnh new to i tng, chng trnh s dng delete
xo i tng khi b nh. Lc ny hm hu b c gi v count gim xung 1.
i tng a2 c khai bo s dng hm thit lp sao chp mc nh, m hm ny
khng lm thay i gi tr count. Do vy, count vn gi gi tr 1.

V d 6
Tim ra ch sai v quyn truy xut trong on chng trnh sau:
class A
{
int pri;
public:
int bub;
friend void funcA(A);
firend class B;
};
class B
{
void func(A a)
{
cout<<a.pri;
cout<<a.pub;
}
};
class C
{
void func(A a)
{
cout<<a.pri;
cout<<a.pub;
LP TRNH HNG I TNG VI C++


Trang 22
}
};
void funcA(A a)
{
cout<<a.pri;
cout<<a.pub;
}
void funcB(A a)
{
cout<<a.pri;
cout<<a.pub;
}
Li gii
Truy xut n thuc tnh pri ca i tng a trong hm funcB v trong hm thnh
phn func ca lp C l khng th c. Tt c cc truy xut n thuc tnh pub u
c bi v y l thuc tnh public. Trong hm funcA, ta c th truy nhp c thuc
tnh pri bi v hm ny c khai bo l bn b ca lp A. Tng t, tt c cc
hm thnh phn ca lp B cng u c th truy xut ti thuc tnh pri ca lp A bi v
lp B c coi l bn b ca lp A.

V d 7
qun l im thi vo trng HSPKTHY ca cc th sinh, ta xy dng lp
ThiSinh m t cc th sinh bao gm cc thuc tnh v phng thc sau:
- Tn th sinh
- im ca ba mn thi Ton, L, Ho
- Nhp thng tin ca cc th sinh gm tn v im ca ba mn thi Ton, L, Ho
- In thng tin tn, im v tng im thi 3 mn
- Tnh tng im thi ca th sinh
Trn c s lp xy dng c, vit chng trnh lm cc cng vic sau.
- Nhp danh sch kt qu thi ca cc th sinh vo t bn phm
- a ra mn hnh danh sch th sinh trung tuyn( im chun vo trng l 18)

Li gii
CT2_7.CPP


#include <iostream.h>
#include <stdio.h>
#include <conio.h>
class ThiSinh
{
// Cc thuc tnh
char ten[25];// Tn ca th sinh khngdi qu 24 k t
int toan, ly, hoa;// im ba mn ton, l, ho
public:
// Cc phng thc
void nhapdl();//Nhp d liu cho th sinh
void inkq();// In kt qu thi ca th sinh
int tong();// Tnh tng im ca th sinh
};
void ThiSinh::nhapdl()
{
cout<<Nhap ten:;fflush(stdin);gets(ten);
cout<<Nhap diem toan:;cin>>toan;
cout<<Nhap diem ly:;cin>>ly;
cout<<Nhap diem hoa:;cin>>hoa;
}
5.
LP TRNH HNG I TNG VI C++


Trang 23
void ThiSinh::inkq()
{ // Kt qu thi ca th sinh c in trn mt dng theo nh dng
// Ten Toan Ly Hoa
Tong
printf(%-25s%6d%6d%6%6d\n,ten,toan,ly,hoa,tong());
}
int ThiSinh::tong()
{
return (toan+ly+hoa);
}
void main()
{ // Chng trnh chnh thc hin nhp danh sch vo s lng th
// sinh cn nhp
clrscr();
int n;
cout<<Cho so thi sinh:;cin>>n;
// To n i tng th sinh cho n th sinh cn nhp d liu
ThiSinh *dsts=new ThiSinh[n];
// Nhp d liu cho tng th sinh
for(int i=0;i<n;++i)
{
cout<< Nhap du lieu cho thi sinh thu:<<i+1<<endl;
// Gi phng thc nhp d liu ca th sinh th i trong mng
dsts[i].nhapdl();
}
// In danh sch cc th sinh trung tuyn
cout<<Danh sach nhung nguoi trung truyen \n;
printf(%-25s%6s%6s%s%6s\n,Ten,Toan,Ly,Hoa,Tong);
for(i=0;i<n;++i)
if(dsts[i].tong()>=18)
dsts[i].inkq();
// Xo cc i tng to v kt thc chng trnh
delete dsts;
getch();
}

6.



V d 8: Hm thit lp vi cc tham s mc nh

CT2_8.CPP


#include <iostream.H>
class Time
{
public:
Time(int = 0, int = 0, int = 0); //Constructor mac dinh
void SetTime(int, int, int);
void PrintMilitary();
void PrintStandard();

private:
int Hour;
int Minute;
int Second;
};

//Ham constructor de khoi dong du lieu private
//Cac gia tri mac dinh la 0
Time::Time(int Hr, int Min, int Sec)
{
7.
LP TRNH HNG I TNG VI C++


Trang 24
SetTime(Hr, Min, Sec);
}

//Thiet lap cac gia tri cua Hour, Minute va Second
//Gia tri khong hop le duoc thiet lap la 0
void Time::SetTime(int H, int M, int S)
{
Hour = (H >= 0 && H < 24) ? H : 0;
Minute = (M >= 0 && M < 60) ? M : 0;
Second = (S >= 0 && S < 60) ? S : 0;
}

//Hien thi thoi gian theo dang gio quan doi: HH:MM:SS
void Time::PrintMilitary()
{
cout << (Hour < 10 ? "0" : "") << Hour << ":"
<< (Minute < 10 ? "0" : "") << Minute << ":"
<< (Second < 10 ? "0" : "") << Second;
}

//Hien thi thoi gian theo dang chuan: HH:MM:SS AM (hoac PM)
void Time::PrintStandard()
{
cout << ((Hour == 0 || Hour == 12) ? 12 : Hour % 12)
<< ":" << (Minute < 10 ? "0" : "") << Minute
<< ":" << (Second < 10 ? "0" : "") << Second
<< (Hour < 12 ? " AM" : " PM");
}

int main()
{
Time T1,T2(2),T3(21,34),T4(12,25,42),T5(27,74,99);

cout << "Constructed with:" << endl
<< "all arguments defaulted:" << endl << " ";
T1.PrintMilitary();
cout << endl << " ";
T1.PrintStandard();
cout << endl << "Hour specified; Minute and Second defaulted:"
<< endl << " ";
T2.PrintMilitary();
cout << endl << " ";
T2.PrintStandard();
cout << endl << "Hour and Minute specified; Second defaulted:"
<< endl << " ";
T3.PrintMilitary();
cout << endl << " ";
T3.PrintStandard();
cout << endl << "Hour, Minute, and Second specified:"
<< endl << " ";
T4.PrintMilitary();
cout << endl << " ";
T4.PrintStandard();
cout << endl << "all invalid values specified:"
<< endl << " ";
T5.PrintMilitary();
cout << endl << " ";
T5.PrintStandard();
cout << endl;
return 0;
}

8.
LP TRNH HNG I TNG VI C++


Trang 25



Chng trnh v d trn khi to nm i tng ca lp Time ( dng 52). i
tng T1 vi ba tham s ly gi tr mc nh, i tng T2 vi mt tham s c m
t, i tng T3 vi hai tham s c m t, i tng T4 vi ba tham s c m t
v i tng T5 vi cc tham s c gi tr khng hp l.
Kt qu

V d 9:Lp c hm hu b

CT 2_9.CPP


#include <iostream.h>
class Simple
{
private:
int *X;
public:
Simple(); //Constructor
~Simple(); //Destructor
void SetValue(int V);
int GetValue();
};

Simple::Simple()
{
X = new int; //Cap phat vung nho cho X
}

Simple::~Simple()
{
delete X; //Giai phong vung nho khi doi tuong bi huy bo
}
9.
LP TRNH HNG I TNG VI C++


Trang 26

void Simple::SetValue(int V)
{
*X = V;
}

int Simple::GetValue()
{
return *X;
}

int main()
{
Simple S;
int X;

cout<<"Enter a number:";
cin>>X;
S.SetValue(X);
cout<<"The value of this number:"<<S.GetValue();
return 0;
}


10.



kt qu

V d 10: Chng trnh sau minh ha khai bo v s dng hm friend.
CT2_10.CPP

#include <iostream.H>
class Count
{
friend void SetX(Count &, int); //Khai bao friend
public:
Count()//Constructor
{
X = 0;
}
void Print() const //Xuat
{
cout << X << endl;
}
private:
int X;
};

//Co the thay doi du lieu private cua lop Count vi
//SetX() khai bao la mot ham friend cua lop Count
void SetX(Count &C, int Val)
{

LP TRNH HNG I TNG VI C++


Trang 27
C.X = Val; //Hop le: SetX() la mot friend cua lop Count
}

int main()
{
Count Object;

cout << "Object.X after instantiation: ";
Object.Print();
cout << "Object.X after call to SetX friend function: ";
SetX(Object, 8); //Thiet lap X voi mot friend
Object.Print();
return 0;
}




kt qu

D/ BI TP T GII
Cu hi trc nghim
Cu 1:
Ch c mt khng nh trong nhng cu sau l sai. Cu no?
a./ Mi th hin ca mt lp c s hu ring cc thuc tnh thng thng
b./ Cc th hin ca mt lp cng chia s cc thuc tnh tnh ca lp
c./ Mi th hin ca mt lp c cc nh ngha ring cho cc phng thc ca n.
d./ Mi i tng l mt th hin ca mt lp
Cu 2:
Cc t kho public v private dng
a./ Cho php ngi thit k lp che du mt phn thi hnh ca lp trc ngi s
dng lp.
b./ Trnh bin dch ti u ho chng trnh
c./ m bo na ton ca lp khi thit k
d./ Hn ch vic sao chp lp
Cu 3
Ch ra li sai vi cc khai bo cho lp A
class A
{
A(int i);
};
A a1;//(1)
A b2(5) //(2)
a./ Ch dng 1 li
b./ Ch dng 2 li
c./ C hai dng li
d./ Khng dng no li
Cu 4:
Cho bit gi tr ca n vi cc dng lnh sau:
LP TRNH HNG I TNG VI C++


Trang 28
class A
{
public:
static int i;
};
int A::i=5;
A a1;
a1.i++;
A a2;
int n=a2.i+1;
a./ n=5;
b./ n=6;
c./ n=7;
d./ Khng cu no ng
Cu 5:
Ch ra li vi cc khai bo cho lp A
class A
{
public:
A(int i);
};
A a1(5);
A a3;// (1)
A a2=a1;// (2)
a./ Ch dng 1 li
b./ Ch dng 2 li
c./ C 2 dng li
d./ Khng dng no li
Bi tp
Bi 2.1: Xy dng lp Stack, d liu bao gm nh stack v vng nh ca stack. Cc
thao tc gm:
Khi ng stack.
Kim tra stack c rng khng?
Kim tra stack c y khng?
Push v pop.
Bi 2.2: Xy dng lp hnh tr Cylinder, d liu bao gm bn knh v chiu cao ca
hnh tr. Cc thao tc gm hm tnh din tch ton phn v th tch ca hnh tr .
Bi 2.3: Hy xy dng mt lp Point cho cc im trong khng gian ba chiu (x,y,z).
Lp cha mt constructor mc nh, mt hm Negate() bin i im thnh i
lng c du m, mt hm Norm() tr v khong cch t gc v mt hm Print().
Bi 2.4: Xy dng mt lp Matrix cho cc ma trn bao gm mt constructor mc nh,
hm xut ma trn, nhp ma trn t bn phm, cng hai ma trn, tr hai ma trn v nhn
hai ma trn.
LP TRNH HNG I TNG VI C++


Trang 29
Bi 2.5: Xy dng mt lp Matrix cho cc ma trn vung bao gm mt constructor mc
nh, hm xut ma trn, tnh nh thc v tnh ma trn nghch o.
Bi 2.6: Xy dng lp Person qun l h tn, nm sinh, im chn mn hc ca tt
c cc hc vin ca lp hc. Cho bit bao nhiu hc vin trong lp c php lm lun
vn tt nghip, bao nhiu hc vin thi tt nghip, bao nhiu ngi phi thi li v tn
mn thi li. Tiu chun xt:
Lm lun vn phi c im trung bnh ln hn 7 trong khng c mn
no di 5.
Thi tt nghip khi im trung bnh khng ln hn 7 v im cc mn
khng di 5.
Thi li c mn di 5.
Bi 2.7: Xy dng mt lp String. Mi i tng ca lp String s i din mt chui k
t. Cc thnh vin d liu l chiu di chui v chui k t thc. Ngoi constructor v
destructor cn c cc phng thc nh to mt chui vi chiu di cho trc, to mt
chui t mt chui c.
Bi 2.8: Xy dng mt lp Vector lu tr vector gm cc s thc. Cc thnh vin
d liu gm:
Kch thc vector.
Mt mng ng cha cc thnh phn ca vector.
Ngoi constructor v destructor, cn c cc phng thc tnh tch v hng ca hai
vector, tnh chun ca vector (theo chun bt k no ).
Bi 2.9: Xy dng lp Employee gm h tn v chng minh nhn dn. Ngoi
constructor cn c phng thc nhp, xut h tn v chng minh nhn dn ra mn
hnh

Bi 2.10:
Mt lp i tng sch trong h thng qun l th vin c cc thuc tnh
- Tn sch
- Tng s quyn sch
- S quyn sch cho mn
Xy dng lp i tng trn vi cc phng th nh sau
- Phng th nhp d liu cho i tng t bn phm. Cc thng tin cn nhp l
tn sch, tng s sch, s cho mn.
- Phng thc in thng tin i tng ra mn hnh bao gm tn, tng s v s
cho mn.
- Phng thc tnh s sch cn li trong th vin(tng s - s mn)
Trn c s lp xy dng c, vit chng trnh chnh thc hin cc cng vic.
- Nhp danh sch cc quyn sch vi s lng sch cn nhp c cho vo t
bn phm.
- a ra mn hnh thng tin v cc quyn sch hin c trong th vin(s sch cn
li phi ln hn 0)
LP TRNH HNG I TNG VI C++


Trang 30
Bi 2.11:
Vit mt lp biu din hnh ch nht c cc thuc tnh l di hai cnh( chiu rng
v chiu di) v c cc phng thc sau.
- Nhp d liu hai cnh cho hnh ch nht
- Tnh chu vi v din tch hnh ch nht
- In thng tin ca hnh ch nht ra mn hnh(bao gm di hai cnh, chu vi v
din tch)
Trn c s lp xy dng c vit chng trnh cho php ngi s dng nhp d
liu ca mt hnh ch nht ri in thng tin v n ra mn hnh.
Bi 2.12:
Xy dng mt lp Date m t thng tin v ngy, thng, nm(month, day, year). Lp
Date c cc hm thnh phn:
- Hm thit lp vi ba tham s c gi tr mc nh( l ngy h thng)
- Nhp d liu ngy, thng v nm
- Hm in thng tin v ngy thng nm di dng mm-dd-yy
- Hm nextDay() tng Date tng ngy mt
Trn c s lp Date va xy dng vit chng trnh cho bit khong cch ngy gia
hai mc thi gian vi ngy bt u c nhp vo t bn phm cho ti ngy hin thi.


Bi 2.13:
Xy dng lp Stack v lp Queue m t hot ng ca ngn xp v hng i cc s
nguyn.
Bi 2.14:
Xy dng mt lp m t cc bng thi u bng gi l BangThiDau. Gi thit mi
bng c bn i v thi u cho tng cp. C lch cc trn u ca bng. To cc
phng thc nhp kt qu thi u v tnh im cho tng i. Yu cu vic nhp kt
qa thi u phi theo th t thi gian. Thm cc phng thc hin th thng tin thi u
ca tng i v ca c bng. Vit chng trnh kim nghim lp xy dng c.
Bi 2.15:
M rng bi tp trn vi lp DoiBong m t cc i bng thi u. Thng tin ca mi
i bng bao gm tn i bng, danh sch cu th, v hun luyn vin. Lp
bangThiDau s dng cc i tng ca lp DoiBong lm i bng thi u ca bng.
Cc bng lc ny c thm thuc tnh tn ca bng thi u.
S dng cc lp xy dng trn vit chng trnh qun l thi u ca cp
bng th gii c 32 i thi u c chia lm 8 bng. To thm lp m t lch thi
u cho cc vng tip theo ca gii. Yu cu ca chng trnh nh sau:
- Ban u ngi s dng nhp cc thng tin v i bng, sau phn bng v lch
thi u ton gii.
- Kt qu cc trn thi u c vo theo th t lch thi u
- Chng trnh t ng chn cc i vo vng tip theo cho ti trn trung kt.
- Ti mi thi im ca gii chng trnh c th a ra cc thng tin v gii.
Bi 2.16:
Mt quyn s in thoi cha cc th c thng tin v tn, a ch v s in thoi.
Thit k cc lp tng ng vi cc th thng tin v s in thoi. Vit chng trnh cho
php qun l s in thoi da trn cc lp xy dng c.

LP TRNH HNG I TNG VI C++


Trang 31



|NH NGHA CHNG TON T TRN LP


MC TIU CA BI NY GIP NGI HC
Cch nh ngha cc php ton cho kiu d liu lp v cu trc
Cc ton t chuyn kiu p dng cho kiu d liu lp

A/ NHC LI L THUYT
Ton t c nh ngha chng bng cch nh ngha mt hm ton t. Tn hm
ton t bao gm t kho operator theo sau l k hiu ca ton t c nh ngha
chng.
Hu ht cc ton t ca C++ u c th nh ngha chng. Khng th to ra cc k
hiu php ton mi.
Phi m bo cc c tnh nguyn thu ca ton t c nh ngha chng, chng
hn: u tin, trt t kt hp, s ngi.
Khng s dng tham s c gi tr ngm nh nh ngha chng ton t.
Cc ton t (), [], ->, = yu cu hm ton t phi l hm thnh phn ca lp.
Hm ton t c th l hm thnh phn hay l hm bn ca lp
Khi hm ton t l hm thnh phn, ton hng bn tri lun l i thuc lp.
Nu ton hng bn tri l i tng ca lp khc th hm ton t tng ng phi l
hm bn.
Chng trnh dch khng t bit cch chuyn kiu gia kiu d liu chun v kiu
d liu t nh ngha. V vy ngi lp trnh cn phi m t tng minh cc chuyn i
ny di dng hm thit lp chuyn kiu hay hm ton t chuyn kiu.
Mt hm ton t chuyn kiu thc hin chuyn i t mt i tng thc lp sang
i tng thuc lp khc hoc mt i tng c kiu c nh ngha trc.
Hm thit lp chuyn kiu c mt tham s v thc hin chuyn i t mt gi tr
sang i tng kiu lp.
Ton t gn l ton thay c nh nhgi chng nht, c bit khi lp c cc thnh
phn d liu ng.
nh ngha chng ton t tng, gim mt ngi, phi phn bit hai hm ton t
tng ng cho dng tin t v dng hu t.
B. MT S LU (Cc li thng gp, mt s thi quen lp trnh tt...)
Cc li thng gp
To mt ton t
Thay i nh ngha ca cc ton t trn cc kiu c nh ngha trc
Cho rng vic nh ngha chng mt ton t s t ng ko theo nh ngha chng
ca cc ton t lin quan.
Qun nh ngha chng ton t gn v hm thit lp sao chp cho cc lp c cc
thnh phn d liu ng.
Mt s thi quen lp trnh tt
S dng ton t nh ngha chng khi iu lm cho chng trnh trong sng
hn.
Trnh lm dng nh ngha chng ton t v iu n n kh kim sot chng
trnh.
Ch n cc tnh cht nguyn thu ca ton t c nh ngha chng.
Hm thit lp, ton t gn, hm thit lp sao chp ca mt lp thng i cng
nhau.
LP TRNH HNG I TNG VI C++


Trang 32
C/ BI TP MU
V d 1:
Mt lp phn s c ton t cng(+) c nh ngha nh sau:
class PS
{
public:
PS(int ts=0, int ms=1);
PS operator+(PS);
};
Trong cc dng lnh sau y dng no sai?
PS a,b,c;
a=b+c;//(1)
a=b+3;//(2)
a=3+b;//(3)
Li gii
Trong ba dng lnh th hai dng u l ng bi v lc ta c:
(1) a=b.operator+(c) l ton t c nh ngha trong lp phn s
(2) a=b.operator+(3) vi 3 s t ng chuyn kiu thnh phn s
Dng lnh (3) sai v ta khng c ton t cng mt s nguyn vi mt phn s.
c th thc hin c tt c ba dng lnh nh trn th ton t cng trong lp PS
phi c nh ngha l mt hm bn.
class PS
{
public:
PS(int ts=0, int ms=1);
friend PS operator+(PS);
};
Khi cc li gi s tng ng vi ton t nh sau:
(1) a=operator+(b,c)
(2) a=operator+(b,3)
(3) a=operator+(3,b)

V d 2:Chng ta xy dng lp s phc vi tn lp l Complex v a nng ha ton t
+ trn lp ny.
CT3_1.CPP


#include <iostream.h>
class Complex
{
private:
double Real,Imaginary;
public:
Complex(double R=0.0,double I=0.0);//Constructor mac
dinh
void Print();//Hien thi so phuc
Complex operator + (Complex Z);//Phep cong hai so phuc
Complex operator + (double R);//Phep cong mot so phuc
voi mot so thuc
};

Complex::Complex(double R,double I)
{
Real = R;
Imaginary = I;
}

11.
LP TRNH HNG I TNG VI C++


Trang 33
void Complex::Print()
{
cout<<'('<<Real<<','<<Imaginary<<')';
}

Complex Complex::operator + (Complex Z)
{
Complex Tmp;
Tmp.Real = Real + Z.Real;
Tmp.Imaginary = Imaginary + Z.Imaginary;
return Tmp;
}

Complex Complex::operator + (double R)
{
Complex Tmp;
Tmp.Real = Real + R;
Tmp.Imaginary = Imaginary;
return Tmp;
}

int main()
{
Complex X,Y(4.3,8.2),Z(3.3,1.1);
cout<<"X: ";
X.Print();
cout<<endl<<"Y: ";
Y.Print();
cout<<endl<<"Z: ";
Z.Print();
X = Y + Z;
cout<<endl<<endl<<"X = Y + Z:"<<endl;
X.Print();
cout<<" = ";
Y.Print();
cout<<" + ";
Z.Print();
X = Y + 3.5;
cout<<endl<<endl<<"X = Y + 3.5:"<<endl;
X.Print();
cout<<" = ";
Y.Print();
cout<<" + 3.5";
return 0;
}

12.


kt qu
LP TRNH HNG I TNG VI C++


Trang 34

V d 3:
Cho mt lp c ton t chuyn kiu nh sau:
class A
{
public:
operator int ();
};
Khi ta c th s dng cu lnh no trong nhng cu ln sau:
A a;
int i=a;//(1)
float f=a;//(2)
Li gii
Lnh (1) l ng bi v ta c ton t p kiu int nn chng trnh t ng p kiu
v mt s nguyn. Cn lnh 2 sai bi v ta khng c ton t p kiu float.
V d 4 a nng ha ton t [] truy cp n mt phn t ca vector.
CT3_4.CPP


#include <iostream.h>
class Vector
{
private:
int Size;
int *Data;
public:
Vector(int S=2,int V=0);
~Vector();
void Print() const;
int & operator [] (int I);
};

Vector::Vector(int S,int V)
{
Size = S;
Data=new int[Size];
for(int I=0;I<Size;++I)
Data[I]=V;
}

Vector::~Vector()
{
delete []Data;
}
void Vector::Print() const
{
cout<<"Vector:(";
13.
LP TRNH HNG I TNG VI C++


Trang 35
for(int I=0;I<Size-1;++I)
cout<<Data[I]<<",";
cout<<Data[Size-1]<<")"<<endl;
}

int & Vector::operator [](int I)
{
return Data[I];
}

int main()
{
Vector V(5,1);
V.Print();
for(int I=0;I<5;++I)
V[I]*=(I+1);
V.Print();
V[0]=10;
V.Print();
return 0;
}

14.


kt qu

V d 5:a nng ha ton t () truy cp n mt phn t ca vector.
CT3_5.CPP


//Chuong trinh 4.6
#include <iostream.h>

class Vector
{
private:
int Size;
int *Data;
public:
Vector(int S=2,int V=0);
~Vector();
void Print() const;
int & operator () (int I);
};

Vector::Vector(int S,int V)
{
Size = S;
Data=new int[Size];
for(int I=0;I<Size;++I)
Data[I]=V;
}

Vector::~Vector()
{
15.
LP TRNH HNG I TNG VI C++


Trang 36
delete []Data;
}
void Vector::Print() const
{
cout<<"Vector:(";
for(int I=0;I<Size-1;++I)
cout<<Data[I]<<",";
cout<<Data[Size-1]<<")"<<endl;
}

int & Vector::operator ()(int I)
{
return Data[I];
}

int main()
{
Vector V(5,1);
V.Print();
for(int I=0;I<5;++I)
V(I)*=(I+1);
V.Print();
V(0)=10;
V.Print();
return 0;
}


16.


kt qu

V d 6: a nng ha ton t () truy cp n phn t ca ma trn.
CT3_6.CPP


//Chuong trinh 4.7
#include <iostream.h>

class Matrix
{
private:
int Rows,Cols;
int **Data;
public:
Matrix(int R=2,int C=2,int V=0);
~Matrix();
void Print() const;
int & operator () (int R,int C);
};

Matrix::Matrix(int R,int C,int V)
{
int I,J;
Rows=R;
Cols=C;
17.
LP TRNH HNG I TNG VI C++


Trang 37
Data = new int *[Rows];
int *Temp=new int[Rows*Cols];
for(I=0;I<Rows;++I)
{
Data[I]=Temp;
Temp+=Cols;
}
for(I=0;I<Rows;++I)
for(J=0;J<Cols;++J)
Data[I][J]=V;
}

Matrix::~Matrix()
{
delete [] Data[0];
delete [] Data;
}

void Matrix::Print() const
{
int I,J;
for(I=0;I<Rows;++I)
{
for(J=0;J<Cols;++J)
{
cout.width(5);//Hien thi canh ler phai voi chieu
dai 5 ky tu
cout<<Data[I][J];
}
cout<<endl;
}
}

int & Matrix::operator () (int R,int C)
{
return Data[R][C];
}

int main()
{
int I,J;
Matrix M(2,3,1);
cout<<"Matrix:"<<endl;
M.Print();
for(I=0;I<2;++I)
for(J=0;J<3;++J)
M(I,J)*=(I+J+1);
cout<<"Matrix:"<<endl;
M.Print();
return 0;
}


18.


kt qu
LP TRNH HNG I TNG VI C++


Trang 38

V d 7: a nng ha ton t ++ v --
CT3_7.CPP


#include <iostream.h>

class Point
{
private:
int X,Y;
public:
Point(int A=0,int B=0);
Point operator ++();
Point operator --();
void Print() const;
};

Point::Point(int A,int B)
{
X = A;
Y = B;
}

Point Point::operator++()
{
++X;
++Y;
return *this;
}

Point Point::operator--()
{
--X;
--Y;
return *this;
}

void Point::Print() const
{
cout<<"X="<<X<<",Y="<<Y<<endl;
}

int main()
{
Point P1(2,6),P2(5,8);
cout<<"Point 1:";
P1.Print();
cout<<"Point 2:";
P2.Print();
++P1;
--P2;
cout<<"Point 1:";
P1.Print();
19.
LP TRNH HNG I TNG VI C++


Trang 39
cout<<"Point 2:";
P2.Print();
return 0;
}

20.



Kt qu

V d 8:a nng ha ton t du phy.
CT3_8.CPP


#include <iostream.h>

class Point
{
private:
int X,Y;
public:
Point(int A=0,int B=0);
Point operator +(Point P);
Point operator ,(Point P);
void Print() const;
};

Point::Point(int A,int B)
{
X = A;
Y = B;
}

Point Point::operator+(Point P)
{
Point Tmp;
Tmp.X=X+P.X;
Tmp.Y=Y+P.Y;
return Tmp;
}

Point Point::operator,(Point P)
{
Point Tmp;
Tmp.X=P.X;
Tmp.Y=P.Y;
cout<<P.X<<" "<<P.Y<<endl;
return Tmp;
}

void Point::Print() const
{
cout<<"X="<<X<<",Y="<<Y<<endl;
}

21.
LP TRNH HNG I TNG VI C++


Trang 40
int main()
{
Point P1(2,6),P2(5,20),P3(1,1);
cout<<"Point 1:";
P1.Print();
cout<<"Point 2:";
P2.Print();
cout<<"Point 3:";
P3.Print();
P1=(P1,P1+P2,P3);
cout<<"Point 1:";
P1.Print();
return 0;
}

22.


kt qu

V d 9:a nng ha ton t ->.
CT3_9.CPP


#include <iostream.h>

class MyClass
{
public:
int Data;
MyClass * operator ->()
{
return this;
}
};

int main()
{
MyClass M;
M->Data = 10;
cout<<M.Data<<" "<<M->Data;
return 0;
}
23.

24.


kt qu


V d 10: a nng ha ton t gn.
CT3_10.CPP

LP TRNH HNG I TNG VI C++


Trang 41

#include <iostream.h>
#include <string.h>

class String
{
private:
char *St;
int Len;
public:
String(char *S);
~String();
char *GetStr();
String & operator=(String &Obj);
};

String::String(char *S)
{
Len=strlen(S);
St=new char[Len+1];
strcpy(St,S);
}

String::~String()
{
delete []St;
}

char * String::GetStr()
{
return St;
}

String & String::operator=(String &Obj)
{
if (Len< Obj.Len)
{
delete [] St;
St=new char[Obj.Len+1];
}
Len=Obj.Len;
strcpy(St,Obj.St);
return *this;
}

int main()
{
String S1("Hello"), S2("Chao");
cout<<"S1="<<S1.GetStr()<<endl;
cout<<"S2="<<S2.GetStr()<<endl;
S2=S1;
cout<<"S1="<<S1.GetStr()<<endl;
cout<<"S2="<<S2.GetStr()<<endl;
return 0;
}

25.

26.


kt qu
LP TRNH HNG I TNG VI C++


Trang 42

V d 11: Chng ta s xy dng mt lp x l vic to v thao tc trn cc chui
(string). C++ khng ci sn kiu d liu chui. Nhng C++ cho php chng ta thm
kiu chui nh mt lp thng qua c ch a nng ha.
CT3_11.CPP


#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#include <assert.h>

class String
{
private:
char *Ptr; //Con tro tro den diem bat
dau cua chuoi
int Length; //Chieu dai chuoi
public:
String(const char * = ""); //Constructor
chuyen doi
String(const String &); //Constructor
sao chep
~String(); //Destructor
const String &operator=(const String &);
//Phep gan
String &operator+=(const String &);
int operator!() const;
int operator==(const String &) const;
int operator!=(const String &) const;
int operator<(const String &) const;
int operator>(const String &) const;
int operator>=(const String &) const;
int operator<=(const String &) const;
char & operator[](int); //Tra ve ky
tu tham chieu
String &operator()(int, int); //Tra ve mot
chuoi con
int GetLength() const;
friend ostream &operator<<(ostream &,
const String &);
friend istream &operator>>(istream &,
String &);
};

//Constructor sao chep: Chuyen doi char * thanh String
String::String(const char *S)
{
cout << "Conversion constructor: " << S << endl;
Length = strlen(S);
Ptr = new char[Length + 1];
assert(Ptr != 0);
strcpy(Ptr, S);
}

String::String(const String &Copy)
{
cout << "Copy constructor: " << Copy.Ptr << endl;
27.
LP TRNH HNG I TNG VI C++


Trang 43
Length = Copy.Length;
Ptr = new char[Length + 1];
assert(Ptr != 0);
strcpy(Ptr, Copy.Ptr);
}

//Destructor
String::~String()
{
cout << "Destructor: " << Ptr << endl;
delete [] Ptr;
}

const String &String::operator=(const String &Right)
{
cout << "operator= called" << endl;
if (&Right != this)
{
delete [] Ptr;
Length = Right.Length;
Ptr = new char[Length + 1];
assert(Ptr != 0);
strcpy(Ptr, Right.Ptr);
}
else
cout << "Attempted assignment of a String
to itself" << endl;
return *this;
}

String &String::operator+=(const String &Right)
{
char *TempPtr = Ptr;
Length += Right.Length;
Ptr = new char[Length + 1];
assert(Ptr != 0);
strcpy(Ptr, TempPtr);
strcat(Ptr, Right.Ptr);
delete [] TempPtr;
return *this;
}

int String::operator!() const
{
return Length == 0;
}

int String::operator==(const String &Right) const
{
return strcmp(Ptr, Right.Ptr) == 0;
}

int String::operator!=(const String &Right) const
{
return strcmp(Ptr, Right.Ptr) != 0;
}

int String::operator<(const String &Right) const
{
return strcmp(Ptr, Right.Ptr) < 0;
}

int String::operator>(const String &Right) const
LP TRNH HNG I TNG VI C++


Trang 44
{
return strcmp(Ptr, Right.Ptr) > 0;
}

int String::operator>=(const String &Right) const
{
return strcmp(Ptr, Right.Ptr) >= 0;
}

int String::operator<=(const String &Right) const
{
return strcmp(Ptr, Right.Ptr) <= 0;
}

char &String::operator[](int Subscript)
{
assert(Subscript >= 0 && Subscript < Length);
return Ptr[Subscript];
}

String &String::operator()(int Index, int SubLength)
{
assert(Index >= 0 && Index < Length && SubLength
>= 0);
String *SubPtr = new String;
assert(SubPtr != 0);
if ((SubLength == 0) || (Index + SubLength >
Length))
SubPtr->Length = Length - Index + 1;
else
SubPtr->Length = SubLength + 1;
delete SubPtr->Ptr;
SubPtr->Ptr = new char[SubPtr->Length];
assert(SubPtr->Ptr != 0);
strncpy(SubPtr->Ptr, &Ptr[Index], SubPtr->Length);
SubPtr->Ptr[SubPtr->Length] = '\0';
return *SubPtr;
}

int String::GetLength() const
{
return Length;
}
ostream &operator<<(ostream &Output, const String &S)
{
Output << S.Ptr;
return Output;
}

istream &operator>>(istream &Input, String &S)
{
char Temp[100];
Input >> setw(100) >> Temp;
S = Temp;
return Input;
}

int main()
{
String S1("happy"), S2(" birthday"), S3;
cout << "S1 is \"" << S1 << "\"; S2 is \"" << S2
<< "\"; S3 is \"" << S3 << '\"' << endl
<< "The results of comparing S2 and S1:"
LP TRNH HNG I TNG VI C++


Trang 45
<< endl
<< "S2 == S1 yields " << (S2 == S1) <<
endl
<< "S2 != S1 yields " << (S2 != S1) <<
endl
<< "S2 > S1 yields " << (S2 > S1) <<
endl
<< "S2 < S1 yields " << (S2 < S1) <<
endl
<< "S2 >= S1 yields " << (S2 >= S1) <<
endl
<< "S2 <= S1 yields " << (S2 <= S1) <<
endl;
cout << "Testing !S3:" << endl;
if (!S3)
{
cout << "S3 is empty; assigning S1 to S3;"
<< endl;
S3 = S1;
cout << "S3 is \"" << S3 << "\"" << endl;
}
cout << "S1 += S2 yields S1 = ";
S1 += S2;
cout << S1 << endl;
cout << "S1 += \" to you\" yields" << endl;
S1 += " to you";
cout << "S1 = " << S1 << endl;
cout << "The substring of S1 starting at" << endl
<< "location 0 for 14 characters, S1(0,
14), is: "
<< S1(0, 14) << endl;
cout << "The substring of S1 starting at" << endl
<< "location 15, S1(15, 0), is: "
<< S1(15, 0) <<endl; // 0 is "to end of
string"
String *S4Ptr = new String(S1);
cout << "*S4Ptr = " << *S4Ptr <<endl;
cout << "assigning *S4Ptr to *S4Ptr" << endl;
*S4Ptr = *S4Ptr;
cout << "*S4Ptr = " << *S4Ptr << endl;
delete S4Ptr;
S1[0] = 'H';
S1[6] = 'B';
cout <<"S1 after S1[0] = 'H' and S1[6] = 'B' is:
"<< S1 << endl;
cout << "Attempt to assign 'd' to S1[30] yields:"
<< endl;
S1[30] = 'd'; //Loi: Chi so vuot khoi mien!!!
return 0;
}




28.



kt qu
LP TRNH HNG I TNG VI C++


Trang 46


D/ BI TP T GII
Cu hi trc nghim
Cu 1:
nh ngha no ng cho ton t nhp(>>) ca mt lp T
a) istream& operator>>(istream&);
b) istream& operator>>(istream);
c) friend istream& operator>>(istream&, T&);
d) friend istream& operator>>(istream&, T);
LP TRNH HNG I TNG VI C++


Trang 47
Cu 2
nh ngha no ph hp nht cho ton t ly thnh phn([]) ca lp mng A
a) int operator [] (int)
b) int& operator [] (int)
c) friend int operator [] (A&, int)
d) friend int& operator [] (A&, int)
Cu 3:
Ch ra cch nh ngha ton t cho lp T b sai
a) T operator-(T&)
b) T operator-()
c) T operator-()
d) friend T opreator +(T&);
e) T operator +(T&);
Cu 4:
Ch ra cch nh ngha ton t cho lp T bai
a) T& operator ++()
b) T operator ++();
c) T& operator++(int);
d) T&operator++(float)
Cu 5:
Cho lp A
class A
{
public:
operator int ();
};
A a;
int i=a;(1)
float f=a;(2)
Ch ra dng no c li
a) Ch dng 1 li
b) Ch dng 2 li
c) C hai dng u li
d) Khng dng no li
Bi tp

Bi 1:
To kiu d liu Date biu din ngy, thng, nm. Ci t cc ton t tnh mt
ngy trc hoc sau mt ngy xc nh no , tnh khong cch thao ngy gia hai
ngy xc nh, tnh th trong tun ca ngy. Cc ton t
vo ra cho ngy.
Bi 2:
lu tr mt ma trn i xng th khng cn nh cho tt c cc phn t ca
n. Xy dng lp biu din ma trn i xng c cc ton t truy nhp tng phn t ca
ma trn. Ch s dng lng b nh cn thit lu ma trn i xng
Bi 3
Xy dng lp biu din cc a thc vi cc ton t cng, tr, nhn, chia v o du.
nh ngha ton t xut kt xut.
Bi 4:
Xy dng mt lp map cho php biu din mt nh x t mt chui k t thnh mt
gi tr s nguyn. nh ngha ton t [] cho lp c th s dng nh x theo cch nh
[abc]->5
LP TRNH HNG I TNG VI C++


Trang 48
Bi 5
Xy dng mt lp biu din cc vector n chiu vi cc ton t cng, tr, tch c
hng hai vector v tch v hng mt vector vi mt s thc. nh ngha ton t cho
php truy nhp cc thnh phn ca vector.

LP TRNH HNG I TNG VI C++


Trang 49


KY THUT THA K


MC TIU CA BI NY GIP NGI HC
Ci t c s tha k
S dng cc thnh phn ca lp c s
nh ngha li cc hm thnh phn
Truyn thng tin gia cc hm thit lp ca lp dn xut v lp c s
Cc loi dn xut khc nhau v s thay i trng thi ca cc thnh phn lp c
s.
S tng thch gia cc i tng ca lp dn xut v lp c s
Ton t gn v tha k
Hm o v tnh a hnh

A/ NHC LI L THUYT
Tha k nng cao kh nng s dng li ca cc on m chng trnh.
Ngi lp trnh c th khai bo lp mi tha tha k d liu v hm thnh phn t
lp c s c nh ngha trc . Ta gi lp mi l lp dn xut.
Trong n tha k, mt lp ch c th c mt lp c s. Trong a tha k cho php
mt lp l dn xut ca nhiu lp
Lp dn xut thng b sung cc thnh phn d liu v cc hm thnh phn trong
nh ngha, ta ni lp dn xut c th hn so vi lp c s v v vy thng m t mt
lp cc i tng c php vi hp hn lp c s.
Lp dn xut khng c quyn truy nhp n cc thnh phn private ca lp c s.
Tuy nhin lp c s c quyn truy xut n cc thnh phn cng cng v c bo
v(proteced).
Hm thit lp ca lp dn xut thng t ng gi cc hm thit lp ca cc lp c
s khi to gi tr cho cc thnh phn trong lp c s.
Hm hu b c gi theo th t ngc li.
Thuc tnh truy nhp protected l mc trung gian gia thuc tnh public v private.
Ch c cc hm thnh phn v hm bn ca lp c s v lp dn xut c quyn truy
xut n cc thnh phn protected ca lp c s.
C th nh ngha li cc thnh phn ca lp c s trong lp dn xut khi thnh
khng cn ph hp trong lp dn xut.
C th gn ni dung i tng lp dn xut cho mt i tng lp c s. Mt con
tr lp dn xut c th chuyn i thnh con tr lp c s.
Hm o c khai bo vi t kho virtual trong lp c s.
Cc lp dn xut c th a ra cc ci t li cho cc hm o ca lp c s nu
mun, tri li chng c th s dng nh ngha nu trong lp c s.
Nu hm o c gi bng cch tham chiu qua tn mt i tng th tham chiu
c xc nh da trn lp ca i tng tng ng.
Mt lp c hm o khng c nh ngha(hm o thun tu) c gi l lp tru
tng. Cc lp tru tng khng th dng khai bo cc i tng nhng c th
khai bo con tr c kiu lp tru tng.
B. MT S LU (Cc li thng gp, mt s thi quen lp trnh tt...)
Cc li thng gp
Cho con tr lp dn xut ch n i tng lp c s m khng m bo chc chn
rng phin bn mi ca hm trong lp dn xut cng tr v cng gi tr nh phin
bn c ca hm.
Khai bo i tng ca lp tru tng
LP TRNH HNG I TNG VI C++


Trang 50
Khai bo hm thit lp l hm o.
Mt s thi quen lp trnh tt
Khi tha k cc kh nng khng cn thit trong lp dn xut, tt nht nn nh ngha
li chng.
C/ BI TP MU
V d 1:
Gi s c cc lp nh trong khai bo. Ch ra cc li sai cho cc lnh ca chng
trnh vit di y.
class A
{
public:
void func();
};
class B: private class A
{ };
A a;
B b;
a.func();
A* pA =&b;
B* pB=&a;
Li gii
Li gi b.func() c li bi v lp B k tha lp A theo ch private. Do vy, tt c
cc thnh phn ca A s l private trong B, hn na khng th truy nhp vo mt
thnh phn private.
Mt i tng ca lp dn xut cng c th coi l i tng ca lp c s. Do vy,
khia bo A* pA=&b l hon ton ng. Nhng iu ngc li l khng ng, nn khai
bo B* pB=&a s gy li khi bin dch.
V d 2: Qun l hc vin

CT4_2.CPP


#include <iostream.h>
#include <conio.h>
class person_data
{
public:
void getinfo();
void display();
person_data();
virtual ~person_data();
private:
char name[25];
int roll_no;
char sex;
};
person_data::person_data()
{

}

person_data::~person_data()
{

}
void person_data::getinfo()
{
cout << "Ten: ";
29.
LP TRNH HNG I TNG VI C++


Trang 51
cin>> name;
cout<<"So: ";
cin>>roll_no;
cout<<"Gioi tinh(F/M) : ";
cin>> sex;
}

void person_data:: display()
{
cout<<name<<"\t";
cout<<roll_no<<"\t";
cout<<sex<<"\t";
}
//-----------------------------------
class academics
{
public:
void getinfo();
void display();
academics();
virtual ~academics();
private:
char course_name[25];
int semester;
char grade[3];
};
academics::academics()
{

}

academics::~academics()
{

}

void academics::getinfo()
{
cout<<"Ten khoa (BA/MBA/MCA etc)? ";
cin>>course_name;
cout<< "Hoc ky (1/2/3/...)? ";
cin>>semester;
cout<<"muc do (A,B,B+,B-..) ? ";
cin>>grade;
}

void academics::display()
{
cout<<course_name<<"\t";
cout<<semester<<"\t";
cout<<grade<<"\t";
}
//-------------------------------

class stud_scholarship :
public person_data,
public academics
{
public:
void getinfo();
void display();
stud_scholarship();
virtual ~stud_scholarship();
LP TRNH HNG I TNG VI C++


Trang 52
private:
float amount;

};
stud_scholarship::stud_scholarship()
{

}

stud_scholarship::~stud_scholarship()
{

}

void stud_scholarship::getinfo()
{
person_data::getinfo();
academics::getinfo();
cout<<"Su ho tro ";
cin>>amount;
}
void stud_scholarship::display()
{
person_data::display();
academics::display();
cout<<amount<<endl;
}
//----------------------------------
int main()
{
stud_scholarship obj;
cout<<"Nhap cac thong tin sau: "<<endl;
obj.getinfo();
cout<<endl;
cout<<"Ten So Gioi tinh Khoa Hoc ky Muc do";
cout<<" Amount"<<endl;
obj.display();

return 0;
}

30.


D/ BI TP T GII
Bi 1: Xy dng lp Stack vi cc thao tc cn thit. T hy dn xut t lp Stack
i mt s nguyn dng sang h m bt k.
Bi 2: Hy xy dng cc lp cn thit trong phn cp hnh 5.2
Bi 3: Hy xy dng cc lp cn thit trong phn cp hnh 5.3 tnh din tch (hoc
din tch xung quanh) v th tch.
Bi 4: Vit mt phn cp k tha cho cc lp Quadrilateral (hnh t gic), Trapezoid
(hnh thang), Parallelogram (hnh bnh hnh), Rectangle (hnh ch nht), v Square
(hnh vung). Trong Quadrilateral l lp c s ca phn cp.

You might also like