Giáo trình Lập trình hướng đối tượng với C++

Chia sẻ: Nguyễn Thị Giỏi | Ngày: | Loại File: PDF | Số trang:52

0
98
lượt xem
23
download

Giáo trình Lập trình hướng đối tượng với C++

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

- Nhập xuất dữ liệu sử dụng toán tử cin và cout - Viết chú thích trên một dòng, khai báo biến ở mọi nơi, cấp phát và thu hồi bộ nhớ đồng sử dụng toán new và delete - giải các bài tậpcó sử dụng kỹ thuật chồng hàm,tham số ngầm định - C++ là một sự mời rộng của C,do đó có thể sử dụng một chương trình biên dịch C++ để dịch và thực hiện các chương trình viết bằng C

Chủ đề:
Lưu

Nội dung Text: Giáo trình Lập trình hướng đối tượng với C++

  1. Giáo trình Lập trình hướng đối tượng với C++
  2. L P TRÌNH HƯ NG I TƯ NG V I C++ Mét sè tiÖn Ých vµ më réng cña C++ so víi C M C TIÊU C A BÀI NÀY GIÚP NGƯ I H C Nh p/xu t d li u s d ng toán t cin và cout Vi t chú thích trên m t dòng, khai báo bi n m i nơi, c p phát và thu h i b nh ng s d ng toán new và delete, Gi i các bài t p có s d ng k thu t ch ng hàm, thâm s ng m nh. A/ TÓM T T LÝ THUY T - C++ là m t s m i r ng c a C, do ó có th s d ng m t chương trình biên d ch C++ d ch và th c hi n các chương trình vi t b ng C - C yêu c u các chú thích n m gi a /* và */. C++ cho phép t o m t chú thích b t u b ng “//” cho n h t dòng - C++ cho phép khai báo tuỳ ý. Th m chí có th khai báo bi n trong ph n kh i t o c a câu lênh l p for - C++ cho phép truy n tham s cho hàm b ng tham chi u. i u này tương t như truy n tham bi n cho chương trình con trong ngôn ng l p trình PASCAL. Trong l i g i hàm ta dùng tên bi n và bi n ó s ư c truy n cho hàm qua tham chi u. i u ó cho phép thao tác tr c ti p trên bi n ư c truy n ch không ph i gián ti p qua bi n tr . - Toán t new và delete trong C++ ư c dùng qu n lý b nh ng thay vì các hàm c p phát ng c a C - C++ cho phép ngư i vi t chương trình mô t các giá tr ng m nh cho các tham s c a hàm, nh ó hàm có th ư c g i v i m t danh sách các tham s không . - Toán t “::” cho phép truy nh p bi n toàn c c khi ng th i s d ng bi n c c b và toàn c c cùng tên. - Có th nh nghĩa các hàm cùng tên v i các tham s khác nhau. Hai hàm cùng tên s ư c phân bi t nh giá tr tr v và danh sách ki u các tham s . B. M T S LƯU Ý (Các l i thư ng g p, m t s thói quen l p trình t t...) Các l i thư ng g p Quên óng */ cho các chú thích Khai báo bi n sau khi bi n ư c s d ng S d ng l nh return tr v giá tr nhưng khi nh nghĩa hàm l i mô t hàm ki u void ho c ngư c l i, quên câu l nh này trong trư ng h p hàm yêu c u giá tr tr v . Không có hàm nguyên m u cho các hàm B qua kh i t o cho các bi n tham chi u Thay i giá tr c a các h ng T o các hàm cùng tên, cùng tham s . M t s thói quen l p trình t t S d ng “//” tránh l i không óng */ khi chú thích n m g n trong m t dòng. S d ng các kh năng vào ra m i c a C++ chương trình d c hơn. t các khai báo biên lên u kh i l nh. Ch dùng t khoá inline v i các hàm “nh ”,”không ph c t p”. S d ng con tr truy n tham s cho hàm khi c n thay i giá tr tham s , còn tham chi u dùng truy n các tham s có kích thư c l n mà không có nhu c u thay i n i dung. Tránh s d ng bi n cùng tên cho nhi u m c ch khác nhau trong chương trình. Trang 1
  3. L P TRÌNH HƯ NG I TƯ NG V I C++ C/ BÀI T P M U Ví d 1: C++ ch p nh n hai ki u chú thích. Các l p trình viên b ng C ã quen v i cách chú thích b ng /*…*/. Trình biên d ch s b qua m i th n m gi a /*…*/. Xét chương trình sau : CT1_1.CPP /* 1. Chương trình in các s t 0 n 9. */ #include void main() { int I; for(I = 0; I < 10 ; ++ I)// 0 - 9 cout
  4. L P TRÌNH HƯ NG I TƯ NG V I C++ cin>>X; cout>Y; cout
  5. L P TRÌNH HƯ NG I TƯ NG V I C++ bi n nguyên i ư c khai báo trong dòng l nh for có v trí tương ương v i vi c khai báo i bên ngoài for. Vì v y, trong vòng for th hai ta s d ng bi n i nhưng chương trình không báo l i. Ví d 5 : Tìm l i sai cho các khai báo prototype hàm dư i ây (các hài này ư c khai báo trong cùng m t chương trình) 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) L i g i: Trong nh nghĩa ch ng hàm, trình biên d ch phân bi t các hàm b i ki u d li u tr ra c a hàm mà ch phân bi t b i danh sách tham s c a hàm. Do v y hàm 1 và hàm 2 b nh nghĩa ch ng lên nhau và trình biên d ch báo l i. Gi a hàm 2 và hàm 3 không có l i b i chúng khác nhau b i ki u d li u c a tham s . Trong hàm 4 ta ã s d ng sai cách truy n giá tr m c nh cho tham s . Không báo gi truy n giá tr m c nh cho m t tham s trư c m t tham s không ư c truy n giá tr ng m nh. Trong cách nh nghĩa hai hàm 5 và 6 có s nh p nh ng. Khi ta g i hàm func2 v i tham s là m t s nguyên thì trình biên d ch không bi t là s g i hàm 5 hay hàm 6 b i vì c hai hàm này u ư c. Trong trư ng h p này trình biên d ch cũng thông báo l i. Ví d 6: Tìm l i sai(l i cú pháp và b nh ) cho chương trình sau: int & refl() { int a=5; return a; } int & rè2(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 l i: Trong các hàm có k t qu tr v là m t tham chi u, chúng ta luôn ph i chú ý r ng bi n ư c tr l i có giá tr là tham chi u không b xoá kho i b nh chương trình khi k t thúc th c hi n hàm. Do v y hai hàm ref1 và ref2 là sai b i vì nó tr v tham chi u t i biên mà a l i là bi n c c b trong ref1 và là tham s trong ref2 ch ư c t o ra t m th i Trang 4
  6. L P TRÌNH HƯ NG I TƯ NG V I C++ trên stack khi g i hàm và xoá kh i stack khi k t thúc hàm. Hàm ref3 không có l i vì a là m t tham chi u t i m t bi n không n m trong hàm. Trong khái báo các tham chi u ph i ư c g n v i m t bi n nào ó trong b nh . Do v y các khai báo r1, r2 là sai. L i g i ref3(5) cũng là sai b i vì tham s cho hàm ph i là tham chi u n m t bi n, trong khi ó ta l i truy n vào h ng s . Ví d 7: Cho bi t k t qu th c hi n chương trình sau: #include 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
  7. L P TRÌNH HƯ NG I TƯ NG V I C++ if (a[i]>a[j]) hoanvi(a[i],a[j]); // In ket qua cout
  8. L P TRÌNH HƯ NG I TƯ NG V I C++ Ví d 10: Chương trình c ng hai ma tr n trong ó m i ma tr n ư c c p phát ng. Chúng ta có th xem m ng hai chi u như m ng m t chi u như hình 1.2 dư i ây Hình 1.2: M ng hai chi u có th xem như m ng m t chi u. G i X là m ng hai chi u có kích thư c m dòng và n c t. A là m ng m t chi u tương ng. N u X[i][j] chính là A[k] thì k = i*n + j Chúng ta có chương trình như sau : CT1_10.CPP #include #include //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(); coutM; coutN; //C p phát vùng nh cho ma tr n A if (!AllocMatrix(&A,M,N)) { //endl: Xu t ra kí t xu ng dòng (‘\n’) cout
  9. L P TRÌNH HƯ NG I TƯ NG V I C++ cout
  10. L P TRÌNH HƯ NG I TƯ NG V I C++ for(int I=0;I
  11. L P TRÌNH HƯ NG I TƯ NG V I C++ c)func(1.5,2.5); d)func(1,2); Câu 3: Cho bi t giá tr c a y sau khi th c hi n: 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) không câu nào úng Câu 4: Tìm giá tr c a 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 Bài t p t gi i Bài 1.1: Anh (ch ) hãy vi t l i chương trình sau b ng cách s d ng l i các dòng nh p/xu t trong C++. /* Chương trình tìm m u chung nh nh t */ #include void main() { int a,b,i,min; printf("Nhap vao hai so:"); scanf("%d%d",&a,&b); min=a>b?b:a; Trang 10
  12. L P TRÌNH HƯ NG I TƯ NG V I C++ for(i = 2;i
  13. L P TRÌNH HƯ NG I TƯ NG V I C++ Bài 1.7: Vi t chương trình t o m t m ng m t chi u ng có kích thư c là n (n nh p t bàn phím). Các giá tr c a m ng này ư c phát sinh ng u nhiên trên o n [a, b] v i a và b u nh p t bàn phím. Hãy tìm s dương nh nh t và s âm l n nh t trong m ng; n u không có s dương nh nh t ho c s âm l n nh t thì xu t thông báo "không có s dương nh nh t" ho c "không có s âm l n nh t". Bài 1.8: Anh (ch ) hãy vi t m t hàm tính bình phương c a m t s . Hàm s tr v giá tr bình phương c a tham s và có ki u cùng ki u v i tham s . Bài 1.9: Trong ngôn ng C, chúng ta có hàm chuy n i m t chu i sang s , tùy thu c vào d ng c a chu i chúng ta có các hàm chuy n i sau : int atoi(const char *s); Chuy n i m t chu i s thành s nguyên ki u int. long atol(const char *s); Chuy n i m t chu i s thành s nguyên ki u long. double atof(const char *s); Chuy n i m t chu i s thành s th c ki u double. Anh (ch ) hãy vi t m t hàm có tên là aton (ascii to number) chuy n i chu i sang các d ng s tương ng. Bài 1.10: Anh ch hãy vi t các hàm sau: Hàm ComputeCircle() tính di n tích s và chu vi c c a m t ư ng tròn bán kính r. Hàm này có prototype như sau: void ComputeCircle(float & s, float &c, float r = 1.0); Hàm ComputeRectangle() tính di n tích s và chu vi p c a m t hình ch nh t có chi u cao h và chi u r ng w. Hàm này có prototype như sau: void ComputeRectangle(float & s, float &p, float h = 1.0, float w = 1.0); Hàm ComputeTriangle() tính di n tích s và chu vi p c a m t tam giác có ba c nh a,b và c. Hàm này có prototype như sau: void ComputeTriangle(float & s, float &p, float a = 1.0, float b = 1.0, float c = 1.0); Hàm ComputeSphere() tính th tích v và di n tích b m t s c a m t hình c u có bán kính r. Hàm này có prototype như sau: void ComputeSphere(float & v, float &s, float r = 1.0); Trang 12
  14. L P TRÌNH HƯ NG I TƯ NG V I C++ Hàm ComputeCylinder() tính th tích v và di n tích b m t s c a m t hình tr có bán kính r và chi u cao h. Hàm này có prototype như sau: void ComputeCylinder(float & v, float &s, float r = 1.0 , float h = 1.0); Bài 1.11: Vi t chương trình qu n lý i m h c sinh v i c u trúc danh sách n i ơn. Trong chương trình s d ng toán t vào ra và toán t new c p phát b nh ng. Bài 1.12: Vi t m t hàm th c hi n vi c s p x p m t m ng s nguyên theo chi u tăng d n ho c gi m d n. Hàm này t ng m c nh ki u s p x p theo chi u tăng d n. Bài 1.13: Vi t m t hàm gi i phương trình b c hai. Hàm này tr l i thông báo r ng phương trình có nghi m hay không có nghi m kép. N u có nghi m thì nghi m s ư c lưu vào tham s x1, x2 và ư c truy n như là tham bi n. Bài 1.14:Vi t m t hàm tìm v trí xu t hi n u tiên c a m t t khoá trong m t xâu. Hàm này tr l i v trí tìm th y c a t khoá trong xâu(b t u t 0) và thay i con tr xâu ư c truy n vào thành v trí c a ký t ngay sau ký t cu i cùng c a t khoá. T khoá c n tìm ư c ưa vào như là m t tham s và có m t giá tr m c nh. Trang 13
  15. L P TRÌNH HƯ NG I TƯ NG V I C++ §èi t−îng vµ líp (Class and Object) M C TIÊU C A BÀI NÀY GIÚP NGƯ I H C Phân tích ư c khái ni m óng gói d li u Khai báo và s d ng m t l p Khai báo và s d ng i tư ng. S d ng hàm thi t l p và hàm hu b Khai báo và s d ng hàm thi t l p sao chép Vai trò c a hàm thi t l p ng m nh A/ NH C L I LÝ THUY T Trong C++, tên c u trúc là m t ki u d li u không c n kèm theo t khoá struct. L p cho phép ngư i l p trình mô t các i tư ng th c t v i các thu c tính và hành vi. Trong C++ thư ng s d ng t khoá class khai báo m t l p. Tên l p là m t ki u d li u dùng khi khai báo các i tư ng thư c l p(các th hi n c th c a l p). Thu c tính c a i tư ng trong m t l p ư c mô t dư i d ng các bi n th hi n. Các hành vi là các hàm thành ph n bên trong l p. Có hai cách nh nghĩa các hàm thành ph n c a m t l p; khi nh nghĩa hàm thành ph n bên ngoài khai báo l p ph i t trư c tên hàm thành ph n tên c a l p và toán t “::” phân bi t v i các hàm t do cùng tên. Ch nên nh nghĩa hàm thành ph n bên trong khai báo l p khi nó không quá ph c t p cho chương trình d c. Có th khai báo và s d ng các con tr i tư ng, tham chi u i tư ng. Hai t khoá public và private dùng ch nh thu c tính truy nh p cho các thành ph n( d li u/hàm) khai báo bên trong l p. Thành ph n bên trong l p ư c khai báo public có th truy nh p t m i hàm khai báo m t i tư ng thu c l p ó. Thành ph n private trong m t i tư ng ch có th truy nh p ư c b i các hàm thành ph n c a i tư ng ho c các hàm thành ph n c a l p dùng t o i tư ng( ây tính c trư ng h p i tư ng là tham s c a hàm thành ph n) Hai hàm thành ph n c bi t c a m t l p g i là hàm thi t l p và hàm hu b . Hàm thi t l p ư c g i t ng(ng m nh) m i khi m t i tư ng ư c t o ra và hàm hu b ư cg it ng khi i tư ng h t th i gian s d ng. Hàm thi t l p có thu c tính public, cùng tên v i tên l p nhưng không có giá tr tr v. M t l p có ít nh t hai hàm thi t l p: hàm thi t l p sao chép ng m nh và hàm thi t l p do ngư i l p trình thi t l p(n u không mô t tư ng minh thì ó là hàm thi t l p ng m nh). Hàm hu b cũng có thu c tính public, không tham s , không giá tr tr v và có tên b t u b i ~ theo sau là tên c a l p. Bên trong ph m v l p( nh nghĩa c a các hàm thành ph n), các thành ph n c a l p ư c g i theo tên. Trư ng h p có m t i tư ng toàn c c cùng tên, mu n xác nh i tư ng y ph i s d ng toán t “::”. L p có th ch a các thành ph n d li u là các i tư ng c a l p khác. Các i tư ng này ph i ư c kh i t o trư c i tư ng tương ng c a l p bao. M i i tư ng có m t con tr ch n b n thân nó, ta g i ó là con tr this. Con tr này có th ư c s d ng tư ng minh ho c ng m nh tham xác nh các thành ph n bên trong i tư ng. Thông thư ng ngư i ta s d ng this dư i d ng ng m nh. Hàm b n c a m t l p là hàm không thu c l p nhưng có quy n truy nh p t i các thành ph n private c a l p. Trang 14
  16. L P TRÌNH HƯ NG I TƯ NG V I C++ Khai báo b n b có th khai báo b t kỳ ch nào trong khai báo l p. B. M T S LƯU Ý (Các l i thư ng g p, m t s thói quen l p trình t t...) Các l i thư ng g p Quên d u “;” cu i khai báo l p Kh i t o các thành ph n giá tr trong khai báo l p nh nghĩa ch ng m t hàm thành ph n b ng m t hàm không thu c l p Truy nh p n các thành ph n riêng c a l p t bên ngoài ph m vi l p Khai báo giá tr tr v cho hàm thi t l p và hàm hu b Khai báo hàm hu b có tham s , nh nghĩa ch ng hàm hu b G i tư ng minh hàm thi t l p và hàm hu b G i các thàm thành ph n bên trong hàm thi t l p M t s thói quen l p trình t t Nhóm t t c c các thành ph n có cùng thu c tính truy nh p m t nơi trương khái báo l p, nh v y m i t khoá mô t truy nh p ch ư c xác nh m t l n. Khai báo l p vì v y d c hơn. Theo kinh nghi m, các thành ph n private trư c tiên r i n các thành ph n protectech, cu i cùng là t khoá public. nh nghĩa t t c các hàm thành ph n bên ngoài khai báo l p. i u này nh m ph n bi t gi a hai ph n giao di n và ph n cài t l p. S d ng các ti n x lý #ifndef, #define, #endif cho các t p tin tiêu ch xu t hi n m t l n bên trong chương trinhg ngu n. Ph i nh nghĩa các hàm thi t l p m b o r ng các i tư ng u ư c kh i t o n i dung m t cách úng n. C/ BÀI T P M U Ví d 1: nh nghĩa m t l p mô t và x lý các i m trên màn hình ho . V i tên l p là point L i gi i + Các thu c tính c a l p int x;// hoành (c t) int y;// tung ( hàng) int m;// màu + Các phương th c Nh p d li u m t i m Hi n th m t i m nm t i m L p i m ư c xây d ng như sau: class point { private: int x,y,m; public: void nhapsl(); void hien(); void an() { putpixcel(x,y,getbkcolor()); } void point::nhap() { coutx>>y; coutm; } void point::hien() Trang 15
  17. L P TRÌNH HƯ NG I TƯ NG V I C++ { int mau_ht; mau_ht=getcolor(); putpixcel(x,y,m); setcolor(mau_ht); } Nh n xét: + Trong c ba phương th c( dù vi t trong hay vi t ngoài nh nghĩa l p) u ư c truy nh p n các thu c tính x,y và m c a l p. + Các phương th c vi t bên trong nh nghĩa l p (như phương th c an()) ư c vi t như m t hàm bình thư ng. +Khi xây d ng các phương th c bên ngoài l p, c n dùng thêm tên l p và toán t ph m vi :: t ngay trư c tên phương th c quy nh rõ ây là phương th c c a l p nào. Ví d 2: Chúng ta xây d ng ki u c u trúc Time v i ba thành viên s nguyên: Hour, Minute và second. Chương trình nh nghĩa m t c u trúc Time g i là DinnerTime. Chương trình in th i gian dư i d ng gi quân i và d ng chu n. CT2_2.CPP #include 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
  18. L P TRÌNH HƯ NG I TƯ NG V I C++
  19. L P TRÌNH HƯ NG I TƯ NG V I C++ Ví d 3 Nh p m t ngày tháng năm t bàn phím sau ó in ra màn hình. L i gi i CT2_3.CPP #include #include #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
  20. L P TRÌNH HƯ NG I TƯ NG V I C++ cout
Đồng bộ tài khoản