Xem mẫu
- Giáo trình
Lập trình nâng cao
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
Chương1 :
GI I THI U L P TRÌNH HƯ NG I TƯ NG
I. L CH S PHÁT TRI N C A L P TRÌNH :
1. L p trình tuy n tính :
Vi c l p trình cho các máy tính u tiên ph i vi t theo ngôn ng máy
trong h nh phân nên m t nhi u th i gian khi ch y và th nghi m chương
trình g r i.
Kh năng s d ng l i các o n chương trình: không có
Khi các kh năng c a máy tính (MT) tăng: L p trình phát tri n t ơn
gi n n ph c t p hơn.
Các ti n nghi c n thi t cho vi c s d ng l i chương trình g c ban u
h u như không có trong các ngôn ng l p trình tuy n tính (LTTT) ban u.
Khi c n làm công vi c này ngư i ta ph i sao chép l i các chương trình g c,
d n n chương trình dài ra. Nên vi c b o dư ng, s a ch a khó, r t m t
th i gian
D li u: Toàn c c, không có tính che d u d li u nên r t khó ki m soát
2. L p trình có c u trúc :
Phân m nh v n l n thành các v n con c l p. T nh ng v n
con này xây d ng thành th t c và hàm
D li u truy n gi a các th t c thông qua i s , ngoài ra nó có các d
li u riêng mà các th t c bên ngoài ph m vi c a nó không th thâm nh p
ti ưc
3. S tr u tư ng hoá ch c năng :
Trong m t chương trình (CT) có c u trúc ch c n bi t th t c hay hàm
ã cho làm ư c công vi c c th gì là , còn làm th nào mà công vi c
ó l i th c hi n ư c thì không quan tr ng. M t khi th t c còn ư c tin
c y thì nó có th dùng mà không c n bi t là nó ã ph i làm gì hoàn
thành úng ch c năng. i u này ư c g i là s tr u tư ng hoá ch c năng
(functional abstraction), ây là n n t ng c a l p trình có c u trúc
4. L p trình hư ng i tư ng (Object Oriented Programming):
L p trình hư ng i tư ng (LTH T) là xây d ng trên n n t ng c a l p
trình có c u trúc v i s tr u tư ng hoá d li u.
S tr u tư ng d li u (data abstraction) tác ng trên các d li u cũng
tương t như s tr u tư ng hoá ch c năng ã làm trên ch c năng. Khi s
tr u tư ng hoá d li u x y ra, các c u trúc d li u và các ph n t có th
ư c s d ng mà không c n ý t i các chi ti t c th mà ngư i ta xây
d ng.
S thay i căn b n là ch : 1 chương trình hư ng i tư ng (H T)
ư c thi t k xoay quanh d li u mà ta làm vi c trên nó hơn là b n thân
ch c năng chương trình.
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
LTH T s liên k t c u trúc d li u (CTDL) v i các thao tác theo cách
mà chúng ta thư ng nghĩ v th gi i xung quanh ó là: g n 1 hành ng c
th v i 1 lo i i tư ng nào ó.
VD :
Ô tô thì có bánh xe, di chuy n ư c và hư ng chúng thay i
b ng cách quay tay lái.
Tương t ta bi t cây là 1 lo i th c v t thân g và có lá
Ô tô không ph i là cây, cây không ph i là ô tô, v y ta có th k t
lu n r ng i u th c hiên ư c v i ô tô thì không th th c hi n
ư c v i cây. Th t hoang tư ng khi i lái cây ho c tư i nư c cho
ô tô nó l n lên
LTH T cho phép s d ng các quá trình suy nghĩ v th gi i quan vào
d li u
VD :
c ra, thay i và lưu tr ; còn m t s
M t m u tin thì có th
ph c thì có th dùng trong các phép toán. Tuy v y không th vi t
m t s ph c vào t p tin làm m t m u tin nhân s ư c, và ngư c
l i không th c ng hai m u tin nhân s l i v i nhau. M t chương
trình LTH T s xác nh c i m và hành vi c th c a các ki u
d li u. i u ó cho phép chúng ta xác nh 1 cách chính xác
chúng ta có th có ư c nh ng gì các ki u d li u khác nhau.
Chúng ta cũng luôn luôn liên h các khái ni m m i v i các khái
ni m ã t n t i và l i có kh năng suy lu n d a trên s liên h
gi a các s v t . LTH T cũng làm vi c theo cách tương t , cho
phép ta xây d ng CTDL m i d a trên nh ng CTDL ang có mang
theo nh ng tính năng c a c u trúc n n mà chúng d a trên ó,
trong khi v n thêm vào nh ng tính năng m i – tính th a k
(inheritance)
C A L P TRÌNH HƯ NG
II. NH NG THU T NG I
TƯ NG :
1. L p (class), i tư ng (object), phương th c (method) :
LTH T cho phép t ch c d li u theo 1 cách tương t như các nhà
sinh h c t ch c các loài th c v t khác nhau. Theo cách nói c a LTH T
thì m i 1 loài th c v t ó s ư c g i là 1 l p-class
M t l p là 1 b ng m u mô t các thông tin CTDL l n các công vi c c
th c a các ph n t d li u
Mô t
Ch ra nó làm ư c cái gì ? – Hành vi trên nó
M t ph n t mà ư c khai báo thu c 1 l p g i là 1 i tư ng-Object
Các hàm ư c nh nghĩa h p l trên 1 l p g i là phương th c-Method và
chúng là các hàm duy nh t có th x lý d li u c a các i tư ng c a l p
ó
Các CTDL dùng mô t 1 l p thì g i là các thu c tính-Properties
VD: class complex
{
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
int real, imag // properties;
void cong (complex c); // 1
void tru (complex c); // 2
void nhan (complex c); // 3
void chia (complex c); // 4
};
// 1,2,3,4: method
complex a,b; // a,b: object
i tư ng thì có riêng 1 b n sao các ph n t d li u c a l p
M im t
a:real
imag
b:real
imag
Các phương th c nh nghĩa trong 1 l p thì có th g i b i b t kỳ 1 i
tư ng nào. i u này g i là g i thông i p cho i tư ng. Các thông i p
thì ch ph thu c vào i tư ng nh n, nghĩa là i tư ng nào nh n thông
i p thì m i ph i làm theo thông i p ó.
2. L p cơ s (base class), l p d n xu t (derived class) :
Không gi ng như các ki u d li u chu n s n, các l p có th s d ng
các l p khác làm các viên g ch xây d ng cho mình.
xây d ng 1 l p m i. L p ban u thì ư c
M t l p thì có th dùng
g i là l p cơ s -base class. Còn l p m i g i là l p d n xu t-derived class.
3. Tính k th a (Inheritance) :
ó là kh năng cho phép s d ng l i l p ã có s n xây d ng l p m i
như trên ã c p.
Vd: T l p Animals có th xây d ng các l p d n xu t (hay còn g i là
l p con-subclass) t nó.
L p d n xu t thì ư c k th a t t c các thu c tính-properties và
phương th c-method c a l p cơ s , ngoài ra có th có các thu c tính m i
và phương th c m i c a riêng nó.
Animals
Animals
Reptiles
Insects Mammals Amphibians
Các l p Insects, Mammals, Reptiles, Amphibians là nh ng l p
d n xu t t l p Animals chúng u có chung thu c tính ư c th a
k t l p Animals là có hai m t, di chuy n ư c …
Nhưng ngoài ra chúng v n có nh ng thu c tính riêng, ch ng h n
Mammals thì ch s ng trên c n còn Amphibians thì v n có th
s ng ư c c trên c n l n dư i nư c
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
4. Tính a hình (Polymorphism) :
VD : n ph m : Properties: Tên
Method: c t vào, l y ra, tìm
Sách : K t h a t l p n ph m
Properties : Tên, Tg, NXB
Method: Tìm
Báo : K t h a t l p n ph m
Properties : Kỳ,Tên
Method: Tìm
Do Báo lưu tr khác Sách nên ph i vi t 2 th t c tìm khác nhau. Vi c
nh nghĩa 2 phương
tìm Sách và Báo là hoàn toàn khác nhau do ó có th
th c khác nhau. Tuy nhiên LTH T cung c p 1 kh năng g i là tính a
hình (polymorphism) gi i quy t v n này. Nó cho phép dùng 1
phương th c tìm ra c sách l n báo. Khi tìm sách, nó dùng phương th c
tìm dành riêng cho sách, còn khi tìm báo, nó l i s d ng phương th c tìm
tương ng v i báo. K t qu là ch c n m t tên phương th c duy nh t ư c
dùng cho c hai công vi c ti n hành trên hai l p d n xu t có liên quan, m c
dù vi c th c hi n c a phương th c ó thay i theo t ng l p.
Tính a hình thì d a trên s ràng bu c, ó là quá trình bu c 1 phương
th c v i 1 hàm th c s . Khi các phương th c ki u a hình ư c s d ng,
trình biên d ch s không xác nh hàm nào tương ng v i phương th c s
ư c g i. Hàm c th nào ư c g i là tuỳ thu c vào lúc ch y. i u này
ư c g i là s ràng bu c mu n, vì nó x y ra khi chương trình ang th c
hi n.
S ràng bu c s m cũng ư c s d ng cho các phương th c không theo
ki u a hình (còn g i là phương th c tĩnh). Lúc ó, khi biên d ch thì trình
biên d ch ã bi t c th hàm nào ư c g i g n v i phương th c nào.
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
Chương 2 :
GI I THI U V NH NG I M M I C A C++
I. C++ LÀ GÌ ?
Là ngôn ng ư c xây d ng t ngôn ng C
Có t t c các tính năng c a C
“Tôn tr ng” cú pháp c a C
Có b sung và c i ti n
II. S KHÁC NHAU GI A C VÀ C++
1. Ép ki u :
Trong C : (tenkieu)bien
Trong C++: tenkieu(bien)
Vd Tính công th c S = 2/1 + 3/2 + … + (n+1)/n
v i n là s nguyên dương nh p t bàn phím, có th vi t:
#include
#include
void main()
{
int n;
printf(“\n So phan tu cua day N= “);
scanf(“%d”,&n);
float s=0.0;
for (int i=1; i
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
int a=3;
printf(“ a ngoai:%d”,::a); (a=2)
printf(“ a trong:%d”,a); (a=3)
}
6. Vào ra trong C++
a. In d li u ra màn hình :
Hàm printf()
Toán t xu t: cout ...>>bi n
Vd : Nh p 1 dãy không quá n ký t và ch a vào m ng h (ki u char) :
cin.get(h,n);
* Chú ý 1: Toán t nh p cin >> s l i ký t chuy n dòng ‘\n’ trong b
m, ký t này có th làm trôi phương th c cin.get
Kh c ph c: dùng cin.ignore(1);
M c ích : b qua 1 ký t chuy n dòng
* Chú ý 2: s d ng các phương th c nói trên c n khai báo t p tiêu :
#include
7. nh d ng khi in ra màn hình :
Quy nh r ng t i thi u là w v trí cho giá tr
(nguyên,th c,chu i) ư c in trong toán t xu t ta dùng hàm:
setw(w)
Hàm này c n t trong toán t xu t
Ch có hi u l c cho 1 giá tr ư c in g n nh t
Các giá tr in ti p theo có r ng t i thi u m c nh là 0
Vd: cout
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
m1= tim;
m2= vang;
n1 = m1; // n1= 2
n2 = m1+ m2; // n2= 5
printf (“\n %d”, m2); //in ra s 3
Không th gán tr c ti p 1 giá tr nguyên cho 1 bi n enum mà ph i
dùng phép ép ki u,
Vd: m1= 2; // l i
m1= MAU(2); // úng
9. C p phát và gi i phóng b nh :
Trong C:
p=(int) malloc(sizeof(int));c p phát 1 vùng nh
p=(int) calloc(n,sizeof(int));c p phát n vùng nh
free(p); gi i phóng b nh
Trong C++ :
p= new int;c p phát 1 vùng nh
p= new int[n];c p phát n vùng nh
delete p; Gi i phóng
10. i ki u tham chi u :
Trong C nh n k t qu c a hàm c n dùng i con tr . Làm cho
vi c xây d ng cũng như s d ng hàm khá phi n ph c.
Trong C++ ưa vào i ki u tham chi u (gi ng Pascal) dùng
ch a k t qu c a hàm. Vi c t o l p và s d ng ơn gi n hơn.
Vd :
Trong C :
void swapint(int *a, int *b)
{
int temp= *a;
*a = *b;
*b = temp;
}
G i hàm: swapint(&x, &y)
Trong C++:
void swapint (int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
G i hàm: swapint (x, y) //không c n toán t &
V y m t bi n tham chi u thì ư c xác nh b ng toán t & dùng
trư c tên bi n gi ng như toán t * dùng trư c con tr
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
i m khác nhau gi a 1 con tr ch n 1 bi n và 1 bi n tham
chi u n nó là:
i v i con tr thì ph i dùng phép toán l y a ch
i v i bi n tham chi u thì không c n.
11. i có giá tr m c nh :
Trong nhi u trư ng h p ngư i dùng vi t 1 l i g i hàm nhưng còn
chưa bi t nên ch n giá tr nào cho các i. kh c ph c khó khăn này,
C++ ưa ra gi i pháp i có giá tr m c nh. Khi xây d ng hàm, ta gán giá
i. Ngư i dùng n u không cung c p giá tr cho
tr m c nh cho m t s
các i này, thì hàm s dùng giá tr m c nh.
Vd1:
void delay ( int loops = 1000)
{
“L nh…
};
G i: delay( ); // loops = 1000;
delay(2000); // loops = 2000;
Vd2:
void test ( int a=100, int b=10; int c=1)
{
“L nh…
};
test( ); // l y các giá tr m c nh
test(1,1,10); // a=1, b=1, c=10
test(10); // a=10, b,c m c nh
test( ,10, ); // b=10, a,c m c nh
test(20,10); // a=20, b=10, c m c nh
12. Hàm Inline :
Khi chương trình biên d ch nhìn th y m t l i g i hàm, nó thư ng
nh y n hàm ó. T i v trí cu i c a hàm nó s quay v l i l nh theo sau
l i g i hàm.
Có th lưu trong không gian b nh nhưng l i t n thêm th i
gian.
i v i nh ng hàm ng n kho ng m t n hai dòng l nh nên s
d ng inline
M t hàm inline ư c vi t như m t hàm bình thư ng trong file
ngu n nhưng biên d ch vào trong mã inline thay vì vào trong m t hàm.
inline float converter(float dollars);
Hàm inline ư c trình bày như m t th c th riêng bi t trong file
ngu n nhưng khi chương trình ư c biên d ch, thân c a hàm th t s ư c
chèn vào trong chương trình b t c âu m t l i g i hàm x y ra.
Cách vi t hàm inline :
Cách 1:
inline[ki u tr v ] (< i s >);
[ki u tr v ] (< i s >)
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
{
// các câu l nh
[return]
}
Cách 2:
inline[ki u tr v ] (< i s >)
{
// các câu l nh
[return]
}
* Hàm Inline : nh ng i m c n lưu ý
T khoá inline ph i xu t hi n trư c các l i g i hàm thì trình biên
d ch m i bi t c n x lý hàm theo ki u inline.
Vd:
#include
int cong(int a, int b);
void int main()
{
int tong=cong(1,2);
print(“%i\n”, tong);
}
inline int cong(int a, int b) // tính t ng hai s
{
return a+b;
}
Chương trình biên d ch s thông báo l i vì ta ã khai báo và s d ng
cong()như m t hàm th c nhưng l i nh nghĩa inline.
B i vì mã c a hàm inline ph i ư c biên d ch trư c trư c khi nó
ư c chen vào chương trình, cho nên ta luôn ph i nh nghĩa hàm inline
trư c khi tham kh o t i chúng.
T khoá inline th t s ch là m t g i ý cho chương trình biên d ch
ch không ph i là m t l nh b t bu c. Th nh tho ng chương trình biên d ch
(CTBD) s b qua inline và biên d ch hàm như m t hàm bình thư ng.
Ch ng h n n u có quá nhi u hàm inline, CTBD s không ch p
nh n inline n a vì thi u b nh , ho c khi các hàm inline quá dài.
13. Hàm ch ng (Function Overloading) :
nh nghĩa m t t p h p nh ng hàm ư c cho cùng tên
S d ng
và cơ b n cùng th c hi n nh ng thao tác như nhau, nhưng s d ng danh
sách i s khác nhau.
void display(); // hàm display
void display(const char*);
void display(int one, int two);
void display(float number);
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
Chương trình biên d ch s d ng ng c nh xác nh nh nghĩa
nào c a m t hàm ư c ch ng ư c g i: tuỳ thu c vào s và ki u c a
nh ng i s ư c cung c p trong l i g i.
Ch nh ng hàm mà cơ b n th c hi n cùng m t tác v , trên nh ng
t p h p d li u khác nhau m i ư c ch ng.
Ưu i m:
Rút ra vi c s d ng cùng m t tác v cho nh ng hàm có tên khác
nhau.
Giúp hi u và g r i mã d dàng.
Duy trì mã d dàng hơn.
Overloading v i nh ng ki u d li u khác nhau
Chương trình biên d ch có th phân bi t nh ng hàm ch ng có
cùng s lư ng i s nhưng khác ki u.
int square(int);
float square(float);
double square(double);
Overloading v i s lư ng i s khác nhau
//khai báo hàm
int square(int);
int square(int,int,int);
int asq = square(a) //g i hàm
int bsq = square(x,y,z)
G i hàm ph i tương thích trên i s , ngư c l i, n u không có
hàm nào có s tương thích ó thì chương trình biên d ch s thông báo l i.
Chú ý r ng chương trình biên d ch gi i quy t overloading tuỳ
thu c vào tr t t mà trong ó hàm ư c khai báo.
Ki u tr v c a hàm không c n xem xét.
Hàm ch ng: Lu t ph m vi
Nguyên lý c a overloading ư c ch p nh n ch trong cùng ph m
vi v i l i khai báo hàm
class first{
public:
void display();
};
class second{
public:
void display();
};
void main()
{
first obj1;
second obj2;
obj1.display();
//không có hàm ch ng x y ra
obj2.display();
}
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
Ph m vi ư c gi i h n nghiêm ng t i v i nh ng l p mà trong
ó chúng ư c khai báo.
14. Ch ng toán t (Operator Overloading) :
Vi c dùng các phép toán thay cho 1 l i g i hàm rõ ràng làm
chương trình ng n g n và sáng s a hơn nhi u.
Vd: th c hi n phép c ng 2 ma tr n ta vi t:
C = A + B; r t g n v i toán h c
C++ cho phép dùng các phép toán chu n t tên cho các hàm
(g i là nh nghĩa ch ng toán t ).
ó là kh năng k t h p m t toán t -operator ã t n t i v i m t
hàm thành ph n và s d ng nó v i nh ng i tư ng c a l p ch a nó như là
nh ng toán h ng-operands.
Nh ng bi u th c v i nh ng operators như +, -, >, +=, = =, ...có
th ch ư c áp d ng trên ki u d li u chu n như int và float
Theo trên ta có ch ng toán t cho phép th c hi n nh ng câu l nh
như :
if (obj1>obj2){ . . .}
v i obj1 và obj2 là nh ng i tư ng c a m t l p.
Thao tác c a vi c so sánh nh ng i tư ng có th ư c nh nghĩa
trong m t hàm thành ph n và k t h p v i toán t so sánh-comparison
operator.
Chương trình biên d ch có th phân bi t gi a nh ng toán t ch ng
b ng vi c ki m tra ki u d li u c a nh ng toán t c a nó.
Ch ng toán t là m t hình th c c a a hình.
Ưu i m
Giúp cho chương trình d dàng c và g r i.
hi u r ng hai i tư ng ư c c ng l i v i nhau và k t
D dàng
qu ư c gán cho i tư ng th ba, n u ta s d ng cú pháp:
obj3 = obj1 + obj2;
thay vì,
obj3.addobjects(obj1,obj2);
nh nghĩa các toán t ch ng
nh nghĩa toán t ch ng ngư i ta dùng cách vi t như sau:
ki u tr v operator ()
{
//các dòng l nh c a thân hàm toán t
[ return ]
}
tên các phép toán
i> chính là các bi n có ki u giá tr tương ng v i ki u d
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
Ps1 óng vai trò là toán h ng 1, ps2 là toán h ng 2
V i các phép toán > truy xu t 1 ki u d li u không
chu n, nh nghĩa ch ng ư c vi t theo ki u sau:
ostream& operator (istream& is, );
chính là ki u d li u m i ư c nh nghĩa, nó có th là tên l p
(class) s ư c nói n trong chương sau ho c tên 1 c u trúc (struct). Theo cách
th c này i tư ng s ư c ưa n lu ng ra (l p ostream) ho c ưa n lu ng
vào(l p istream)
Khi dùng hàm toán t có 2 cách g i :
C1: Dùng như 1 hàm thông thư ng, t c là g i nó thông qua tên hàm.
Vd:
PS ps1, ps2, ps3, ps4, tg1, tg2;
ps1=PS_set(3,4); ps2=PS_set(1,2);
ps3=PS_set(5,7); ps4=PS_set(1,7);
tg1 = operator+(ps3,ps4);// tính t ng 2 phân s
tg2 = operator-(ps1,ps2);// tính hi u 2 phân s
C2: dùng như phép toán s h c chu n
Vd:
PS ps1, ps2, ps3, ps4, tg1, tg2;
ps1= PS_set(3,4); ps2 = PS_set(1,2);
ps3= PS_set(5,7); ps4 = PS_set(1,7);
tg1 = ps3+ps4;
tg2 = ps1-ps2;
Nh n xét:
Ta th y dùng như cách 2 s t nhiên và ơn gi n hơn cách 1 b i vì có th k t
h p nhi u phép toán vi t các bi u th c ph c t p.
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
BÀI T P CHƯƠNG 2
Bt1: Cho m t dãy i m trên m t ph ng, bi t to (x,y) c a t ng i m. Vi t
chương trình tìm m t c p i m xa nhau nh t.
Bt2: Cho bi t h tên, i m toán, lý, hoá c a N thí sinh. In ra danh sách thí sinh
trúng tuy n khi bi t i m chu n.Yêu c u in theo tr t t tăng d n c a t ng i m.
Bt3: Cho m t ma tr n s th c c p m × n; vi t chương trình tìm ph n t l n
nh t và ph n t nh nh t trên t ng hàng c a dãy s .
Bt4: Vi t chương trình hi n xâu ký t b t kỳ trên màn hình ho , t i v trí
(x,y) và có màu m
Bt5: Cho n hình ch nh t, bi t dài hai c nh c a t ng hình. Vi t chương
trình tính và in ra chu vi và di n tích c a các hình.
Bt6: Cho bi t h tên, tu i, m c lương và thu nh p c a N công nhân. Vi t
chương trình in ra danh sách công nhân bao g m: s th t , h tên, tu i, m c
lương và thu nh p. Yêu c u in theo tr t t tăng d n c a tu i.
Bt7: Tìm s l n nh t c a m t dãy s nguyên, dãy s th c.
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
Chương 3: CÁC L P (Classes)
NH NGHĨA L P (CLASS) :
I.
1. Khái ni m v class :
L p (class) là khái ni m trung tâm c a LTH T
L p là s m r ng khái ni m c u trúc (struct) c a C và b n ghi
(record) c a Pascal
Ngoài các thành ph n d li u như c u trúc, l p còn ch a các thành
ph n hàm, còn g i là phương th c (method) hay hàm thành viên
(member function).
Cũng gi ng như c u trúc, l p có th xem như 1 ki u d li u. Vì v y
l p còn g i là ki u i tư ng và ư c dùng khai báo các bi n, m ng
i tư ng
Trong ph n này s xây d ng các nh nghĩa v l p, phương th c,
ph m vi truy nh p, s d ng các thành ph n c a l p, l i g i các phương
th c
2. nh nghĩa l p (class) :
L p (class) là nhóm c a nh ng i tư ng (objects) có cùng chung
thu c tính (properties) và có nh ng m i quan h chung
Thu t ng class là ư c vi t t t t nhóm t “class of objects”
Vd: class of persons
L p ư c nh nghĩa như sau:
class tenlop
{
// Khai báo các thành ph n d li u;(properties)
// Khai báo các phương th c (methods)
};
i tư ng và l p :
Minh ho
3. i tư ng (Object) :
Th hi n m t th c th trong th gi i th c
M t khái ni m v i nh ng nh nghĩa bên ngoài mà liên quan nv n
chúng ta ang i m t.
i tư ng ph c v hai m c ích:
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
Chúng giúp hi u ư c th gi i th c
Chúng cung c p m t n n t ng thi t th c cho s ng d ng
c a máy tính
M i i tư ng có nh ng properties ho c nh ng nét c trưng riêng
c a nó mô t nh ng gì nó có ho c nó làm.
Xe c trong m t ng d ng giám sát giao thông
mouse và keyboard
M t m u tin nhân s
B ng i m liên quan n kỳ thi
N h ng s ph c
Minh ho : Nh ng i tư ng khác nhau
4. Thu c tính (Property) :
M t c trưng ư c òi h i c a m t i tư ng ho c m t th c th khi
ư c trình bày trong m t l p ư c g i là m t thu c tính.
Thu c tính c a 1 l p có th là các bi n, m ng, con tr ki u chu n (int,
float, long…) ho c ki u ngoài chu n ã ư c nh nghĩa trư c (struct,
union, class,…)
Thu c tính c a 1 l p không th là ki u c a chính l p ó nhưng ư c
phép là ki u con tr c a l p này:
Vd: class A
{
A x; // Không ư c vì x có ki u l p A
A *px;// ư c vì px là con tr ki u l p A
};
5. Phương th c (Method) :
M t hành ng ư c òi h i c a m t i tư ng hay m t th c th khi
ư c trình bày trong m t l p ư c g i là m t phương th c hay hàm
thành ph n.
Trong m t l p polygon: "draw", "erase" và "move" là
nh ng ví d c a nh ng phương th c–là m t ph n c a l p.
i tư ng là m t “h p en" nh n và g i thông i p.
H p en th c ch t ch a mã (dãy nh ng câu l nh c a máy tính) và d
li u (thông tin mà nh ng câu l nh th c hi n trên nó).
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
o Thông tin ư c truy n i và nh n l i t
m i khu v c ho c b i nh ng b n ghi
nh gi a các khu v c v i nhau ho c
b i nh ng câu l nh b ng l i là nh ng
i tư ng.
thông i p gi a nh ng
ưc
o Nh ng thông i p này có th
biên d ch b i nh ng l i g i hàm trong
chương trình
Phương th c có th ư c xây d ng t bên ngoài ho c bên trong nh
nghĩa l p. Thông thư ng phương th c ng n vi t trong, phương th c dài
vi t ngoài.
Giá tr tr v c a phương th c có th có ki u b t kỳ (chu n ho c
ngoài chu n).
Trong thân phương th c c a 1 l p có th s d ng:
Các thu c tính c a l p
Các phương th c c a l p
Các hàm xây d ng trong chương trình
Vd: class complex
{
private:
float real, imag;
public:
void set (float i=0.0, float j=0.0
complex &operator + (complex x);
complex &operator – (complex x);
void in ( )
{
printf (“%f \t%f”, real, imag);
}
};
nh nghĩa các method
//
complex complex:: &operator + (complex x)
// complex th 2 ch rõ phép toán này thu c l p complex trong trư ng h p có
nhi u l p.
{
real = real+x.real;
imag = imag+x.imag;
}
void main( )
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
{
complex a, b, c, d;
a.set(1,2);
b.set(3,4);
c = a + b;
d = a – b;
c.in ( );
d.in ( );
};
* Chú ý:
nh nghĩa phương th c trong l p:
Ki u tenpt (ds i)
{
// L nh
}
nh nghĩa phương th c ngoài l p
Ki u tenlop:: tenpt (ds i)
{
// L nh
}
N u phương th c không có i ta v n ph i gi nguyên d u ( ).
Vd: Xây d ng l p s nguyên:
class dayso
{
private:
int *p, n;
public:
void nhap( );
int max( );
int min( );
void sapxep( );
void in( );
};
void dayso:: nhap( )
{
printf (“Nhap so pt:”); scantf (“%d”,&n);
p= new int[n];
printf (“Nhap cac phan tu”);
For (int *pa= p; pa
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
{
int *px;*py,tg;
for (px= p; px
- LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang
void in( );
};
void hocsinh::nhap( )
{
int t;
fflush(stdin); puts(“Ho ten:”);
gets(ht);
printf(“tuoi:”); scanf(“%d”,&t);
tuoi= t;
printf(“diem:”); scanf(“%d”,&t);
diem= t;
}
void hocsinh::in( )
{
printf(“\n%s\t%d\t%d”,ht,tuoi, diem);
}
void main( )
{
hocsinh ds[100];
int i,j,n;
printf(“\n so hoc sinh”);
scanf(“%d”, &n);
printf(“Nhap hoc sinh”);
for(i=0; iage = 5;
this->getdata();
class Person
nguon tai.lieu . vn