Xem mẫu

  1. BỘ NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔN TRƯỜNG CAO ĐẲNG CƠ GIỚI NINH BÌNH GIÁO TRÌNH MÔN HỌC: MH 13_LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG NGHỀ: LẬP TRÌNH MÁY TÍNH TRÌNH ĐỘ: Cao đẳng/ trung cấp Ban hành kèm theo Quyết định số:        /QĐ­…TCGNB  ngày…….tháng….năm .... của Hiệu trưởng Trường Cao Đẳng Cơ giới Ninh   Bình 1
  2. Ninh Bình, năm 2018 TUYÊN BỐ BẢN QUYỀN Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin có thể được   phép dùng nguyên bản hoặc trích dùng cho các mục đích về  đào tạo và tham   khảo. Mọi mục đích khác mang tính lệch lạc hoặc sử  dụng với mục đích kinh  doanh thiếu lành mạnh sẽ bị nghiêm cấm. 2
  3. MỤC LỤC LỜI GIỚI THIỆU Phương pháp lập trình hướng đối tượng trở nên phổ biến, ngày càng được  quan tâm nghiên cứu nhiều. Vì lập trình hướng đối tượng dựa trên việc tổ chức  chương  trình thành các  lớp.  Khác  với  hàm  và  thủ  tục,  lớp  là  một  đơn  vị  bao  gồm cả dữ liệu và các phương thức xử lý vì vậy lớp có thể mô tả các thực thể  một cách chân thực, đầy đủ cả  phần  dữ  liệu  và  yêu  cầu  quản  lý.  Tư tưởng  lập  trình hướng đối tượng được áp  dụng cho hầu hết các ngôn ngữ mới chạy  trên môi trường Windows như Microsoft Access, C++, Visual Basic, Visual C++,  Java,... Vì vậy việc nghiên cứu phương pháp lập trình mới này là rất cần thiết  đối với tất cả những người quan tâm tới lập trình. C  ra  đời năm 1973 với  mục đích ban  đầu là  để viết  hệ  điều hành Unix  trên  máy tính  mini  PDP.  Sau  đó  C  đã  được  sử  dụng  rộng  rãi  trên  nhiều  loại  máy tính khác nhau và đã trở thành một ngôn ngữ lập trình cấu trúc rất được ưa  chuộng. Để đưa C vào thế giới hướng hướng đối tượng, năm 1980 nhà khoa học  người Mỹ B. Stroustrup đã cho ra đời một ngôn ngữ C mới có tên ban đầu là  “C có lớp”, sau đó đến năm 1983 thì gọi là C++.  Ngôn ngữ C++ là một sự phát  triển mạnh mẽ của C. Trong C++ chẳng những đưa vào tất cả các khái niệm,  công cụ  của lập trình hướng  đối tượng mà  còn  đưa vào  nhiều  khả  năng  mới  mẻ  cho  hàm.  Như vậy  C++  là  một  ngôn ngữ  lai  cho  phép  tổ  chức  chương  trình  theo  các  lớp  và  các  hàm.  Có  thể  nói  C++  đã thúc đẩy ngôn ngữ C vốn  đã  rất  thuyết  phục  đi  vào  thế  giới  lập  trình  hướng  đối  tượng và C++ đã trở  thành ngôn ngữ hướng đối tượng nổi bật trong những năm 90. Bài  giảng  này sẽ  trình  bầy một  cách  hệ  thống  các  khái  niệm  của  lập  trình hướng đối tượng  được cài đặt trong C++ như lớp, đối tượng,  sự thừa kế,  tính tương ứng bội và  các  khả  năng  mới  trong  xây dựng, sử  dụng  hàm như:  đối  tham chiếu, đối  mặc định, hàm  trùng  tên,  hàm  toán  tử.  Các  chương từ  1  đến  7  với  cách  giải  thích  tỉ  mỉ  và  với nhiều  chương  trình  minh  hoạ  sẽ  cung  cấp  cho  người  học  các  khái  niệm, phương pháp và kinh nghiệm lập trình hướng đối tượng trên C++. Bài giảng gồm 7 chương và 2 phụ lục Chương 1: Phương pháp hướng đối tượng. Chương 2: Các thành phần của lớp. 3
  4. Chương 3: Lớp. Chương 4: Toán tử định nghĩa chồng. Chương 5: Thừa kế.  Chương 6: H ả m  ả o v à tí nh t ươ ng  ứ ng b ộ i.  Chương  7:Hàm, l ớ p template. Phụ lục 1 trình bầy các phép toán trong C++ và thứ tự ưu của chúng. Phụ lục 2 trình bầy một vấn đề quan trọng nhưng còn ít được nói đến  trong các tài liệu, đó là cách sử dụng con trỏ void để xây dựng các hàm với số  đối không cố định giống như các hàm printf và scanf của C. Khi viết chúng tôi đã hết sức cố gắng để cuốn sách được hoàn chỉnh,  song chắc chắn không tránh khỏi thiếu sót, vì vậy rất mong nhận được sự góp  ý của các bạn. Xin chân thành cám ơn! Ninh Bình, ngày       tháng     năm 2018 Tham gia biên soạn                 1. Chủ biên ­ Đoàn Xuân Luận                2. Phạm Thị Thoa               3. Nguyễn Anh Văn 4
  5. GIÁO TRÌNH MÔN HỌC Tên Môn học: Lập trình hướng đối tượng Mã môn học: MH13 Vị trí, tính chất của mô đun: ­ Vị trí: Môn học được bố trí sau khi học xong các môn học chung. ­ Tính chất: Môn học này là môn học cơ sở. ­ Ý nghĩa, vai trò của môn học: Đây là môn học cơ sở ngành của các ngành liên  quan đến công nghệ thông tin, cung cấp cho sinh viên các kiến thức cơ bản về  lập trình. Mục tiêu của môn học:  ­ Về kiến thức: + Trình bày được các đặc trưng cơ bản: tính đóng gói, tính kế  thừa, tính tương   ứng bội của phương pháp lập trình hướng đối tượng; + Tiếp cận được phương pháp lập trình hướng đối tượng. ­ Về kỹ năng: +  Phân tích, cài đặt và xây dựng được chương trình theo phương pháp hướng   đối tượng trên một ngôn ngữ lập trình cụ thể; + Viết chương trình và thực hiện chương trình trong máy tính. ­ Về năng lực tự chủ và trách nhiệm: + Bố trí làm việc khoa học đảm bảo an toàn cho người và phương tiện học tập. Nội dung của môn học:  Chương 1: Phương pháp hướng đối tượng. Chương 2: Các thành phần của lớp. Chương 3: Lớp. Chương 4: Toán tử định nghĩa chồng. Chương 5: Thừa kế.  Chương 6: H ả m  ả o v à tí nh t ươ ng  ứ ng b ộ i.  5
  6. Chương  7:Hàm, l ớ p template. CHƯƠNG 1 PHƯƠNG PHÁP HƯỚNG ĐỐI TƯỢNG Mã chương: MH13_CH01 Giới thiệu: Phương pháp hướng đối tượng hiện đang được sử  dụng rộng rãi trên thế  giới do có những đặt điểm quan trọng giúp người lập trình có thể  giảm thiểu   đáng kể  thời  gian lập trình, một số  công nghệ  hiện  đại hiện nay như  C++  Builder, Visual Studio .NET,... cho phép người lập trình kế  thừa một kho tàng  đối tượng phong phú để có thể  xây dựng giao diện ứng dụng đồ  họa một cách   nhanh chóng. Những đặt tính cơ  bản của phương pháp này sẽ  được trình bày  trong môn học này. Mục tiêu: - Trình bày được các phương pháp của lập trình hướng đối tượng, các đặt  điểm nỗi bật của phương pháp lập trình hướng đối tượng. - Trình bày được các thành phần của một lớp đối tượng  - Thực hiện các thao tác an toàn với máy tính. Nội dung: Chương 1: PHƯƠNG PHÁP HƯỚNG ĐỐI TƯỢNG 1.1 Các phương pháp lập trình. 1.1.1 Lập trình cấu trúc. Tư tưởng chính của lập trình cấu trúc là tổ chức chương trình thành các  chương trình con. Mỗi chương trình con đảm nhận xử lý một công việc nhỏ trong toàn bộ hệ  thống. Mỗi chương trình con này lại có thể chia nhỏ thành các chương trình con nhỏ  hơn.  Quá  trình  phân  chia  như vậy  tiếp  tục  diễn  ra  cho  đến  các  chương trình  con  nhỏ nhận được đủ đơn giản, đó là quá trình làm mịn dần. Các chương trình con tương  đối độc  lập  với  nhau.  Ngôn  ngữ  lập  trình  thể  hiện  rõ  nét  nhất  phương pháp  lập  trình  cấu trúc  là  ngôn ngữ  lập  trình Pascal.  Trong ngôn  ngữ  lập  trình  C  chỉ  có  một  loại chương trình con là hàm. 6
  7. Hàm là một đơn vị chương trình độc lập dùng để thực hiện một phần việc nào  đó như: nhập số  liệu,  in  kết  quả  hay thực hiện  một  số  tính  toán.  Hàm  cần  có  đối  và các biến, mảng cục bộ dùng riêng cho hàm. Việc trao đổi dữ liệu giữa các hàm thực hiện thông qua các đối và các biến toàn bộ  Các ngôn ngữ như C, PASCAL, FOXPRO là các ngôn ngữ cho phép triển khai. phương pháp lập trình cấu trúc. Một chương trình cấu trúc gồm các cấu trúc dữ liệu (như biến, mảng, bản ghi)  và các hàm, thủ tục. Nhiệm vụ chính của việc tổ chức thiết kế chương trình hướng cấu trúc là tổ  chức chương trình thành các hàm, thủ tục: Chương trình sẽ bao gồm các hàm, thủ tục  nào. Ví dụ : Xét yêu cầu sau: Viết chương trình nhập toạ độ (x,y) của một dãy  điểm, sau đó tìm một cặp điểm cách xa nhau nhất. Trên tư tưởng  của lập trình hướng cấu trúc có thể tổ chức chương trình như sau: + Sử dụng 2 mảng thực toàn bộ x và y để chứa toạ độ dãy điểm + Xây dựng 2 hàm: Hàm  nhapsl  dùng  để  nhập  toạ  độ  n  điểm,  hàm  này  có  một  đối  là  biến  nguyên n và được khai báo như sau: void nhapsl(int n); Hàm do_dai dùng để tính độ dài đoạn thẳng đi qua 2 điểm có chỉ số là i và  j, nó được khai báo như sau: float  do_dai(int i, int j); Chương trình C cho bài toán trên được viết như sau: #include  #include  #include   float x[100],y[100];  float do_dai(int i, int j) { return sqrt(pow(x[i]­x[j],2)+pow(y[i]­y[j],2)); } void nhapsl(int n) { int i; for (i=1;i
  8. } } void main() { int n,i,j,imax,jmax; float  d,dmax; printf("\nSo  diem N= ");  scanf("%d",&n);  nhapsl(n); dmax=do_dai(1,2); imax=1;jmax=2; for (i=1;i
  9. rộng   của  cấu  trúc  trong  C  (struct)  bằng  cách  đưa  thêm  vào  các  phương  thức  (method) hay còn gọi là hàm thành viên (member function). Một lớp được định nghĩa  như sau: class Tên_Lớp { // Khai báo các thành phần dữ liệu // Khai báo các phương thức }; Các  phương  thức  có  thể  được  viết  (xây  dựng)  bên  trong  hoặc  bên  ngoài  (phía dưới)  phần định nghĩa lớp. Cấu trúc (cách viết) phương thức tương tự như hàm  ngoại trừ  quy tắc  sau:  khi  xây dựng  một  phương  thức bên ngoài định  nghĩa lớp  thì  trước tên phương thức cần có tên lớp và 2 dấu : để chỉ rõ phương thức thuộc lớp nào  (xem ví dụ bên dưới). ­       Sử  dụng  các  thành  phần  dữ  liệu  trong  phương thức:  Vì  phương thức  và  các thành  phần  dữ  liệu  thuộc  cùng  một  lớp  nên  trong  thân  của  phương  thức  có  quyền truy nhập đến các thành phần dữ liệu (của cùng lớp). ­       Biến lớp:  Sau  khi  định  nghĩa  một  lớp, có  thể  dùng tên  lớp  để  khai  báo  các  biến kiểu lớp hay còn gọi là đối tượng. Mỗi đối tượng sẽ có các thành phần dữ liệu  và  các phương  thức.  Lời  gọi  một  phương  thức  cần  chứa  tên  đối  tượng  để  xác  định phương thức thực hiện từ đối tượng nào. ­     Một chương trình hướng đối tượng sẽ bao gồm các lớp có quan hệ với  nhau. ­     Việc phân tích, thiết kế chương trình theo phương pháp hướng đối tượng nhằm  thiết kế, xây dựng các lớp. ­       Từ  khái  niệm  lớp  nảy  sinh  hàng  loạt  khái  niệm  khác  như: thành  phần  dữ  liệu, phương  thức, phạm vi, sự đóng gói, hàm tạo, hàm huỷ, sự thừa kế, lớp cơ sở,  lớp dẫn xuất, tương ứng bội, phương thức ảo, ... +Đối tượng (object) là sự biểu diễn một thực thể phần mềm gồm các thuộc  tính và các phương thức liên quan. Một đối tượng cụ thể được gọi là một thể hiện (instance) Một đối tượng là sự đóng gói 2 thành phần:  Trạng thái (state) hay dữ liệu  Các ứng xử (behavior) hay hành vi, thao tác 9
  10. +Lớp (class) là tập hợp các đối tượng có cùng thuộc tính và hành vi Lớp là bản thiết kế hoặc bản mẫu mô tả một cấu trúc dữ liệu gồm:  Các thành phần dữ liệu  Các phương thức Lớp được sử dụng như kiểu dữ liệu người dùng định nghĩa +Thuộc tính (attribute) là dữ liệu trình bày các đặc điểm về một đối tượng. Thuộc tính bao gồm:  Hằng, biến  Tham số nội tại Thuộc tính được xác định kiểu, gồm:  Kiểu cơ bản  Kiểu do người dùng định nghĩa +Phương thức (method) có  liên quan tới  những thứ  mà  đối  tượng có  thể  làm. Một phương thức đáp  ứng một chức năng tác động lên dữ liệu của đối  tượng (thuộc tính). Phương thức là:  Các hàm nội tại của đối tượng  Có kiểu trả về  Tên gọi khác: hàm thành viên +Thông điệp (message) là một lời yêu cầu một hoạt động. Một thông điệp  được truyền khi một đối tượng triệu gọi một hay nhiều phương thức của đối  tượng khác để yêu cầu thông tin. Một thông điệp bao gồm:  Đối tượng nhận thông điệp  Tên phương thức cần thực hiện  Các tham số mà phương thức cần Hệ thống yêu cầu đối tượng thực hiện phương thức như sau:  Gửi thông báo và tham số cho đối tượng  Kiểm tra tính hợp lệ của thông báo  Gọi thực hiện hàm tương ứng phương thức +Sự trừu tượng hoá dữ liệu: là biểu thị những đặc tả thiết yếu của đối tượng  để phân biệt ranh giới rõ ràng giữa các đối tượng và những tính chất đặc thù  của chúng Các loại trừu tượng hoá: 10
  11.  Trừu tượng hoá dữ liệu: không quan tâm các chi tiết không quan  trọng bên trong  Trừu  tượng hoá  chức  năng:  không  quan  tâm  làm  thế  nào  để  thực  hiện công việc Ví dụ: Mô tả hoạt động của một ngăn xếp trong cấu trúc dữ liệu bằng  mảng Các dữ liệu cần thiết cho ngăn xếp: ­          Kích thước của phần tử dữ liệu ­          Số lượng các dữ liệu ­          Chỉ số phần tử tiếp theo Các hoạt động với các ngăn xếp ­          Khởi tạo ­          Thêm một phần tử vào ngăn xếp ­          Đếm số phần tử của ngăn xếp ­          Xóa phần tử trong ngăn xếp Lập trình cấu trúc Khai báo cấu trúc thích hợp Khai báo các thao tác thích hợp typedef struct CStashTag void initialize(CStash* s, int size); { void cleanup(CStash* s); int m_nSize; int add(CStash* s, const void* element); int m_nQuantity; void* fetch(CStash* s,int index); int m_nNext; int count(CStash* s); } CStash; void inflate(CStash* s, int increase); Lập trình hướng đối tượng struct CStash { //dữ liệu int m_nSize; Int m_nQuantity; int m_nNext; // Hàm void initialize(int size); void cleanup(); int add(const void* element); void *fetch(int index); 11
  12. int count(); void inflate(int increase); }; +Bao gói thông tin: Là cơ chế ràng buộc dữ liệu và  các thao tác trên dữ liệu   thành thể thống nhất. Bao gói gồm:  Bao gói: người dùng giao tiếp với hệ thống qua giao diện  Che dấu: ngăn chặn các thao tác không được phép từ bên ngoài Có ưu điểm:  Quản lý sự thay đổi  Bảo vệ dữ liệu +Kế thừa (inheritance): Khả năng cho phép xây dựng lớp mới được thừa  hưởng các thuộc tính và phương thức của lớp đã có Đặc điểm:  Lớp nhận được có thể bổ sung các thành phần  Hoặc định nghĩa lại các thuộc tính của lớp cha Có các loại kế thừa: Đơn kế thừa và đa kế thừa +Tính  đa  hình(polymorphime):  Khả  năng  đưa  một  phương  thức  có  cùng  tên  trong các lớp con Đa hình thực hiện bởi:  Định nghĩa lại  Nạp chồng Cơ chế dựa trên sự kết gán:  Kết gán sớm  Kết gán muộn ­      Ưu điểm của việc thiết kế hướng đối tượng là: +Tập trung  xác  định các  lớp để  mô  tả  các  thực  thể được  gọi  là  các đối  tượng  của bài toán và sau đó xây dựng các dữ liệu cùng các hàm xung quanh các đối  tượng đó. Các thực thể tác động, trao đổi thông tin với nhau qua cơ chế thông  báo (message). Như vậy việc thiết kế chương trình xuất phát từ các nội dung,  các vấn đề của bài toán. +Thông qua nguyên lý  kế  thừa, có  thể loại  bỏ  được  những đoạn chương  trình  lặp lại trong quá trình mô tả các lớp và có thể mở rộng khả năng sử dụng của các lớp  đã xây dựng mà không cần phải viết lại. +Chương  trình  được  xây  dựng  từ  những  đơn  thể  (đối  tượng)  trao  đổi  với  nhau nên  việc  thiết kế  và  lập  trình sẽ  được  thực hiện  theo quy trình nhất  định  chứ  không phải dựa vào kinh nghiệm và kỹ thuật như  trước  nữa. Điều này đảm bảo rút  ngắn được thời gian xây dựng hệ thống và tăng năng suất lao động. +Nguyên lý  đóng  gói  hay  che  giấu  thông  tin  giúp  người  lập  trình  tạo  ra  được  những chương  trình  an  toàn  không bị  thay đổi  bởi  những đoạn chương  trình  12
  13. khác. +Có  thể  xây  dựng  được  ánh  xạ  các  đối  tượng  của  bài  toán  vào  đối  tượng  chương trình. +Cách tiếp cận thiết kế đặt trọng tâm vào dữ liệu, giúp chúng ta xây dựng được  mô hình chi tiết và dễ dàng cài đặt hơn. +Các hệ thống hướng đối tượng dễ mở rộng, nâng cấp thành những hệ lớn hơn. +Kỹ thuật truyền thông báo trong việc trao đổi thông tin giữa các đối tượng  làm cho việc mô tả giao diện với các hệ thống bên ngoài trở nên đơn giản  hơn. +Có thể quản lý được độ phức tạp của những sản phẩm phần mềm. ­     Các ngôn ngữ thuần tuý hướng đối tượng  (như Smalltalk, Java, VB.net, Visual C++, C#...) chỉ hỗ trợ các khái niệm về lớp, không có các khái niệm hàm. ­     C++ là ngôn ngữ hỗ trợ hướng đối tượng, nó cho phép sử dụng cả các công  cụ của lớp và hàm. Ví dụ: xét bài toán tìm độ dài lớn nhất đi qua 2 điểm. Trong bài toán này ta gặp  một thực thể là dãy điểm. Các thành phần dữ liệu của lớp dãy điểm gồm: ­ Biến nguyên n là số điểm của dãy ­ Con trỏ x kiểu thực trỏ đến vùng nhớ chứa dãy hoành độ ­ Con trỏ y kiểu thực trỏ đến vùng nhớ chứa dãy tung độ Các phương thức cần đưa vào theo yêu cầu bài toán gồm: ­ Nhập toạ độ một điểm ­ Tính độ dài đoạn thẳng đi qua 2 điểm Dưới đây là chương trình viết theo thiết kế hướng đối tượng. Để thực hiện  chương trình này đặt tên tệp có đuôi CPP. Một điều mới trong C++ là các khai báo  biến, mảng có  thể  viết  bất  kỳ chỗ  nào  trong  chương trình (nhưng lưu ý  phải  trước khi  sử  dụng biến, mảng). #include  #include  #include  #include  class daydiem { public: int n; float *x,*y; float do_dai(int i, int j) { 13
  14. return sqrt(pow(x[i]­x[j],2)+pow(y[i]­y[j],2)); } void nhapsl(void); }; void daydiem::nhapsl(void) { int i; printf("\nSo diem N= ");  scanf("%d",&n);  x=(float*)malloc((n+1)*sizeof(float));  y=(float*)malloc((n+1)*sizeof(float));  for (i=1;i
  15. ­     Tập trung vào dữ liệu thay cho các hàm ­     Chương trình được chia thành các đối tượng. ­     Các cấu trúc dữ liệu được thiết kế sao cho đặc tả được đối tượng. ­     Các hàm thao tác trên các vùng dữ liệu của đối tượng được gắn với cấu trúc  dữ liệu đó. ­     Dữ liệu được đóng gói lại, được che giấu và không cho phép các hàm ngoại  lai truy nhập tự do. ­     Các đối tượng tác động và trao đổi thông tin với nhau qua các hàm ­     Có thể dễ dàng bổ sung dữ liệu và các hầm mới vào đối tượng nào đó khi  cần thiết ­     Chương trình được thiết kế theo cách tiếp cận từ dưới lên (bottom­up). 1.3 Xây dựng lớp đối tượng. Các bước chính để xây dựng lớp đối tượng ­     Xác định các dạng đối tượng (lớp) của bài toán. ­     Tìm kiếm các đặc tính chung. ­     Xác định lớp cơ sở dựa trên cơ sở các đặc tính chung. ­     Xây dựng lớp dẫn xuất từ lớp cơ sở. BÀI TẬP CHƯƠNG 1 1. Viết chương trình in ra màn hình 2 chữ cái đầu của tên bạn. Ví dụ tên Thủy  In ra 2 chữ TH: TTTTTTTTT      H                    H T  H                    H T   HHHHHHHHH  T   H                     H  T H                     H 2. Viết chương trình nhập hai số nguyên và hiển thị tổng, hiệu, tích và thương của  số nguyên vừa nhập. 3.  Viết chương trình nhập tháng và năm từ bàn phím (chú ý có kiểm tra điều kiện  cho tháng và năm) . Sau đó đưa ra số ngày tương ứng của tháng thuộc năm đã nhập. 4. Viết chương trình nhập chiều cao h từ bàn phím, sau đó hiển thị các tam giác  hình sao  có  chiều  cao  h  như  dưới đây  (trên  DOS).  Chú  ý  có  kiểm  tra  điều  kiện  của  h: 2
  16. *                           * **                       *** h ***                    *****                ****                ******* *****             ********* 5. Viết chương  trình nhập n số  thực từ bàn phím. Sau đó hỏi người  sử dụng muốn  sắp xếp theo chiều tăng dần hay giảm dần rồi đưa ra danh sách số thực của mảng  đã sắp xếp theo yêu cầu của người sử dụng. 16
  17. CHƯƠNG 2 CÁC THÀNH PHẦN CỦA LỚP Mã chương: MH13_CH02 Giới thiệu: Bài này giúp học sinh tìm hiểu về các thành phần của lớp. Mục tiêu: - Trình bày được các thành phần có trong một lớp; - Cài đặt được một lớp đối tượng trên ngôn ngữ trình hướng đối tượng C++; - Cài đặt được các hàm khởi tạo và hàm hủy bỏ; - Khai báo được hàm friend ; - Thực hiện các thao tác an toàn với máy tính. Nội dung: Chương 2  CÁC THÀNH PHẦN CỦA LỚP 2.1 Khai báo một lớp cơ sở. Một lớp cơ sở được khai báo như sau: class  { private: public: }; ... Ví dụ: /*point.cpp*/ #include  #include  class point { /*khai báo các thành phần dữ liệu riêng*/ private: int x,y; /*khai báo các hàm thành phần công cộng*/ public: void init(int ox, int oy); 17
  18. void move(int dx, int dy); void display(); }; /*định nghĩa các hàm thành phần bên ngoài khai báo lớp*/ void point::init(int ox, int oy) { cout
  19. Nó được gọi tự động mỗi khi có một đối tượng được khai báo. Chức năng của hàm  tạo là khởi tạo các giá trị thành phần dữ liệu của đối tượng,  xin cấp phát bộ nhớ cho  các thành phần dữ liệu động. ­     Hàm tạo tạo định nghĩa và khởi tạo các đối tượng của một lớp. ­      Một lớp có thể có nhiều hàm tạo. Ví dụ 1: class Point { int a, b; public: Point (int x,int y) {a = x; b = y;} // constructor  void OffsetPt (int,int); }; Ví dụ 2: /*point.cpp*/ #include  #include  class point { /*khai báo các thành phần dữ liệu riêng*/ int x; int y; /*khai báo các hàm thành phần chung*/ public: point(int ox,int oy) {x=ox;y=oy;} /*hàm tạo*/ void move(int dx, int dy); void display(); }; /*Định nghĩa các hàm thành phần bên ngoài khai báo lớp*/ void point::move(int dx, int dy) { x += dx; y += dy; } void point::display() { cout
  20. point b.init(1,­1);b.display();  clrscr(); } Kết quả thực hiện chương trình như  sau: Toa do : 5 2 Toa do : 3 6 Toa do : 1 ­1 2.2.2 Quy tắc viết hàm Constructor. ­     Hàm tạo có cùng tên với tên của lớp. ­     Hàm tạo phải có thuộc tính public. ­     Hàm tạo không có giá trị trả về và không cần khai báo void. ­     Có thể có nhiều hàm tạo trong cùng lớp (chồng các hàm tạo). ­     Khi một lớp có nhiều hàm tạo, việc tạo các đối tượng phải kèm theo các  tham số phù hợp với một trong các hàm tạo đã khai báo. Ví dụ 3 : /*Định nghĩa lại lớp point*/ class point { int x,y; public: point() {x=0;y=0;} point(int ox, int oy) {x=ox;y=oy;} /*hàm tạo có hai tham số*/ void move(int,int); void display(); }; point a(1);      /* Lỗi vì tham số không phù hợp với hàm tạo */ point b;          /*Đúng, tham số phù hợp với hàm tạo không tham số*/ point c(2,3);  /*Đúng, tham số phù hợp với hàm thiếtlập thứ hai, có hai tham số*/ ­     Định nghĩa hàm tạo không tham số Ví dụ 4: /*point4.cpp*/ #include  #include  class point { /*khai báo các thành phần dữ liệu*/ int x; int y; public: 20
nguon tai.lieu . vn