Xem mẫu

  1. Giáo trình Lập trình nâng cao
  2. 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.
  3. 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 {
  4. 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
  5. 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.
  6. 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
  7. 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
  8. 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
  9. 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 >)
  10. 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);
  11. 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(); }
  12. 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
  13. 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.
  14. 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.
  15. 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:
  16. 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ó).
  17. 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( )
  18. 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
  19. LËp tr×nh chuyªn n©ng cao TrÇn Uyªn Trang { int *px;*py,tg; for (px= p; px
  20. 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