intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giáo trình Lập trình nâng cao - Trần Uyên Trang

Chia sẻ: Nguyễn Xuân Đức | Ngày: | Loại File: PDF | Số trang:154

484
lượt xem
136
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.Các tiện ghi 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 ban đầu. khi cần làm công việc này người ta phải sao chép các chương trình gốc, dẫn đến chương trình dài ra......

Chủ đề:
Lưu

Nội dung Text: Giáo trình Lập trình nâng cao - Trần Uyên Trang

  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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0