• Save
Lập trình hướng đối tượng - p3
Upcoming SlideShare
Loading in...5
×
 

Lập trình hướng đối tượng - p3

on

  • 2,144 views

Học Hướng Đối Tượng là một cách tuyệt vời để nâng cao trình độ lập trình của bạn. Khi thực thi đúng, Hướng Đối Tượng sẽ giúp bạn tạo ra những ...

Học Hướng Đối Tượng là một cách tuyệt vời để nâng cao trình độ lập trình của bạn. Khi thực thi đúng, Hướng Đối Tượng sẽ giúp bạn tạo ra những mã lệnh dễ đọc, dễ bảo trì và mang tính di động cao, giúp cho bạn tiết kiệm được rất nhiều thời gian làm việc.

Statistics

Views

Total Views
2,144
Views on SlideShare
2,144
Embed Views
0

Actions

Likes
2
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Lập trình hướng đối tượng - p3 Lập trình hướng đối tượng - p3 Presentation Transcript

  • NIIT.vn
  • CHƯƠNG IIIL Ớ P VÀ ĐỐ I T ƯỢ NG NIIT.vn 2
  • 1. Xây dựng lớp và đối tượnga. Khai báo class <tên_lớp> { [quyền truy xuất:] //khai báo các thành phần dữ liệu của lớp [quyền truy xuất:] //khai báo các thành phần hàm của lớp }; NIIT.vn 3/20
  • a. Khai báoTrong đó: <tên_lớp>:  do người dùng đặt  tuân theo các qui tắc về tên Ví dụ: Student, NGUOI, HoaDon, ps, MaTran… NIIT.vn 4/20
  • a. Khai báo[quyền truy xuất:]  Là khả năng truy xuất thành phần dữ liệu  Ngầm định là private private (dành riêng) : trong phạm vi lớp đó public (dùng chung) : ở mọi nơi nếu đối tượng tồn tại protected (bảo vệ) : phạm vi lớp đó và các lớp con kế thừa NIIT.vn 5/20
  • a. Khai báoThành phần của lớp  Có thể gồm: Dữ liệu Thuộc tính truy xuất Phương thức NIIT.vn 6/20
  • a. Khai báoKhai báo thành phần  Dữ liệu: Tương tự như khai báo biến <kiểu dữ liệu > <tên_thành_phần>; Chú ý: không được khởi tạo giá trị ban đầu NIIT.vn 7/20
  • a. Khai báoKhai báo thành phần  Hàm thành phần • Cách 1: Khai báo nguyên mẫu trong lớp và định nghĩa ngoài lớp <kiểu trả về > tênlớp::<tên_hàm>([đối số]) { // <thân hàm> } • Cách 2: định nghĩa ngay trong lớp NIIT.vn 8/20
  • a. Khai báoVí dụ 1: Xây dựng cấu trúc dữ liệu mô tả sinh viên: Dữ liệu: họ tên, năm sinh, giới tính, Điểm toán, lý, hóa Phương thức: nhập, tính đtb, in  Lớp sinh viên NIIT.vn 9/20
  • a. Khai báoVí dụ 2: Xây dựng cấu trúc dữ liệu mô tả các phân số: Dữ liệu: tử số, mẫu số Phương thức: nhập, tối giản, in  Lớp các phân số NIIT.vn 10/20
  • a. Khai báoVí dụ 3: Xây dựng cấu trúc dữ liệu mô tả các hóa đơn: Dữ liệu: mã vật tư, tên vật tư, loại phiếu, ngày lập, khối lượng, đơn giá, thành tiền… Phương thức: nhập, tính thành tiền, in  Lớp các hóa đơn NIIT.vn 11/20
  • b. Khai báo đối tượngCú pháp: <tên_lớp> <tên_đối_tượng>;Ví dụ: khai báo 2 đối tượng sinh viênStudent sv1, sv2;Khi đó sv1, sv2 là hai đối tượng sinh viên NIIT.vn 12/20
  • c. Truy xuất thành phầnDữ liệu <tên_đối_tượng>.<tên_tp_dữ liệu>;Ví dụ: truy xuất họ tên và năm sinh của sv Sv1.Hten; Sv2.Ns;Nếu là con trỏ: <tên_con_trỏ>-><tên_tp_dữ liệu>; NIIT.vn 13/20
  • c. Truy xuất thành phầnThành phần hàm <tên_đối_tượng>.<tên_hàm>([ds đối số]);Ví dụ: truy xuất phương thức nhập và in của sv sv1.nhap(); sv2.in();Với con trỏ: <tên_con_trỏ>-><tên_hàm>([đối số]); NIIT.vn 14/20
  • Ví Dụ 1: Nhập thông tin của một sinh viên và xuất ra thông tin đã nhập#include <iostream.h>class Student{ private: char Hten[30], Gtinh[5]; int Ns; float Dtoan,Dly,Dhoa; public: void nhap() { cout << “Nhap vao Ho ten sinh vien: “; cin >> Hten ; cout << “Nhap vao nam sinh: “; cin >> Ns ; cout << “Nhap vao gioi tinh: “; cin >> Gtinh ; cout << “Nhap vao diem toan: “; cin >> Dtoan ; cout << “Nhap vao diem ly: “; cin >> Dly ; cout << “Nhap vao diem hoa: “; cin >> Dhoa ; } //ket thuc ham nhap NIIT.vn 15/20
  • float diemtb() { return ((Dtoan+Dly+Dhoa)/3); } // ket thuc ham diemtb void in() { cout<< Hten<<‘t’<<Ns<<‘t’<<Gtinh<<endl; cout<<”Diem toan:”<< Dtoan<<endl; cout<<”Diem ly:”<< Dly<<endl; cout<<”Diem hoa:”<< Dhoa<<endl; cout<<”Diem trung binh:”<<diemtb()<<endl; } // ket thuc ham in};// ket thuc lop Studentvoid main(){ Student SV; SV.nhap(); SV.in();}// ket thuc ham main NIIT.vn 16/20
  • Ví dụ 2: Nhập ngày tháng năm. Kiểm tra tính hợp lệ và in ra ngày tháng năm đãnhập.#include <iostream.h>#include <conio.h>#define FALSE 0#define TRUE !FALSEstatic char* Thang[]={"","gieng”,"hai”,"ba”,"bon”,"nam”,"sau”,"bay”, "tam“,"chin”,"muoi","muoi mot","chap"};static char* Thu[]={"","Chu nhat”,"hai”,"ba“,"tu","nam”,"sau”,"bay"};static 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(); }; NIIT.vn 17
  • void CDate::nhap() { cout<<endl<<"Ngay: "; cin>>mNgay; cout<<endl<<"Thang: "; cin>>mThang; cout<<endl<<"Nam: "; cin>>mNam; }int CDate::hopLe(){ if ((mThang<1)||(mThang>12)) return FALSE; else { if ((mNgay>=1)&&(mNgay<=NgayThang[mThang])) return TRUE; else if ((mNgay==29)&&laNamNhuan(mNgay)) return TRUE; else return FALSE; }} NIIT.vn 18
  • int CDate::laNamNhuan(int nam){ if (((nam%400)==0)||(((nam%4)==0)&&((nam%100)!=0))) return TRUE; else return FALSE;} void CDate::in() { cout<<endl<<“Ngay da nhap "<<mNgay; cout<<" thang "<<Thang[mThang]; cout<<" nam "<<mNam; } int main() { CDate ngay; ngay.nhap(); if (ngay.hopLe()) ngay.in(); else cout<<“NHAP NGAY KHONG HOP LE"; getch(); return 0; } NIIT.vn 19
  • Ví dụ 3: Nhập một chuỗi ký tự. Xuất ra chuỗi đã nhập.#include <iostream.h>#include <string.h>class CString{ public: int ChieuDai(); void Xuat(); int Nhap(char* s); private: int mLength; char* mPtr;};int CString::Nhap(char *s){ mLength = strlen(s); mPtr = new char[mLength + 1]; if (mPtr == NULL) return 0; strcpy(mPtr,s); return 1;}void CString::Xuat(){ cout << mPtr; NIIT.vn 20}
  • int CString::ChieuDai(){ return mLength;}int main(){ char s[30]; CString str; cout << endl << "Nhap vao 1 chuoi: "; cin >> s; str.Nhap(s); clrscr(); cout << "Ban da nhap chuoi: "; str.Xuat(); cout << endl << "Chuoi co chieu dai: " << str.ChieuDai() << " ky tu"; getch(); return 0;} NIIT.vn 21
  • Ví dụ 4: Cộng 2 thời gian va xuất ra màn hình.#include <iostream.h>class CTime{ public: void addit(CTime aa,CTime bb); void display(); void getinfo(); private: int hours, minutes, seconds;};void CTime::getinfo(){ cin >> hours >> minutes >> seconds;} //ket thuc ham getinfovoid CTime::display(){ cout<<hours<<:<<minutes<<:<<seconds<< endl;} // ket thuc ham display NIIT.vn 22
  • void CTime::addit(CTime aa, CTime bb){ hours = aa.hours + bb.hours; minutes = aa.minutes + bb.minutes; seconds = aa.seconds + bb.seconds; //kiem tra seconds < 60 if( seconds >= 60) { seconds -= 60; // seconds = seconds - 60 minutes++; //minutes = minutes + 1 } //kiem tra minutes < 60 if (minutes >= 60) { minutes -=60; hours++; }} NIIT.vn 23
  • void main(){ CTime one, two, three; cout << "n Nhap vao thoi gian mot (gio phut giay): "; one.getinfo(); cout << "n Nhap vao thoi gian hai (gio phut giay): "; two.getinfo(); three.addit(one, two); cout << "Ket qua la "; three.display(); getch();} NIIT.vn 24
  • 2. Các phương thứcMột đối tượng thường có 4 kiểu hành vi cơ bản:  Các phương thức khởi tạo: Constructor  Các phương thức truy vấn: Queries  Các phương thức cập nhập: Updates  Các phương thức hủy: Destructor NIIT.vn 25
  • a. Hàm khởi tạoKhai báo: <tên_lớp>([ds tham số]);Định nghĩa ngoài lớp: <tên_lớp>::<tên_lớp>([ds tham số]) { //thân hàm } NIIT.vn 26
  • a. Hàm khởi tạo (tiếp)Như vậy hàm khởi tạo: Có với mọi lớp Tên hàm giống tên lớp Không có kiểu nên không cần khai báo Không có giá trị trả về Nếu không xây dựng thì chương trình tự động sinh hàm khởi tạo mặc định Được gọi tự động khi khai báo thể hiện của lớp NIIT.vn 27
  • a. Hàm khởi tạo (tiếp)Một số hàm khởi tạo: - Hàm khởi tạo mặc định: default constructor - Hàm khởi tạo sao chép: copy constructor Khai báo: <tên_lớp>(const <tên_lớp> &<tên_tham_số>) Đối tượng mới sẽ là bản sao của đối tượng đã có NIIT.vn 28
  • Ví dụ:class CDate{ private: int mNgay,mThang,mNam; int hopLe(int,int,int); public: CDate();// hàm khởi tạo mặc định CDate(int,int,int);//hàm khởi tạo có đối số int ganNgay(int); int ganThang(int); int ganNam(int); void doc() const; int docNgay() const; int docThang() const; int docNam() const; int laNamNhuan() const; CDate cong(int soNgay = 1); CDate tru(int soNgay = 1); NIIT.vn 29};
  • CDate::CDate(){ struct date d; getdate(&d); mNgay = d.da_day; mThang = d.da_mon; mNam = d.da_year;}CDate::CDate(int ngay,int thang,int nam){ if (hopLe(ngay,thang,nam)) { mNgay = ngay; mThang = thang; mNam = nam; } else { CDate date; mNgay = date.mNgay; mThang = date.mThang; mNam = date.mNam; }} NIIT.vn 30
  • b. Hàm hủy - DestructorKhai báo: ~<tên_lớp>();Chức năng: - Hủy bỏ, giải phóng các đối tượng khi nó hết phạm vi tồn tại NIIT.vn 31
  • b. Hàm hủy (tiếp)Như vậy hàm hủy: Không có đối số Không có giá trị trả về Không định nghĩa lại Trùng tên với lớp và có dấu ~ ở trước Thực hiện một số công việc trước khi hệ thống giải phóng bộ nhớ Chương trình dịch tự động sinh hàm hủy mặc định NIIT.vn 32
  • 3. Toán tử đa năngCú pháp: <kiểu trả về>operator<tên toán tử>([ds tham số])Định nghĩa ngoài lớp:<kiểu trả về><tên_lớp>::operator<tên toán tử>([dstham số]){//thân hàm} NIIT.vn 33
  • 3. Toán tử đa năng (tiếp)Ví dụ: Toán tử đa năng +, * của lớp phân số Toán tử đa năng+ vectorChú ý: Chỉ có thể định nghĩa lại các toán tử ở trên Không làm thay đổi độ ưu tiên của các toán tử Với toán tử 2 ngôi: toán tử bên trái là ẩn toán tử bên phải là đối số Do đó: số tham số bằng số toán hạng - 1 NIIT.vn 34
  • 3. Toán tử đa năng (tiếp)Cách gọi hàm toán tử: Dùng như cú pháp thông thường của phép toán Ví dụ: PS a,b,c; c=a+b; Dùng như hàm thành phần của đối tượng Ví dụ: PS a,b,c; c=a.operator+(b); NIIT.vn 35
  • Bài tập1. Xây dựng lớp phân số gồm các thành phần: -DL: tử số, mẫu số -Pt: nhập, in, tối giản, so sánh 2 ps Hàm main: -Nhập mảng có n phân số (n<=10) -Sắp xếp mảng PS theo thứ tự giảm dần -In mảng sau khi xếp NIIT.vn 36
  • Bài tập2. Xây dựng lớp số phức gồm các thành phần: -DL: phần thực, phần ảo -Pt: nhập, in, tính pt 2 + pa2 , nhân, chia 2 số phức Hàm main: -Nhập 2 số phức -Tính và in tổng, hiệu hai số phức -In mảng sau khi xếp NIIT.vn 37
  • Bài tập3. Xây dựng lớp vectơ gồm các thành phần: -DL: số phần tử, mảng các phần tử -Pt: nhập, in, tổng 2 vectơ, tích vô hướngHàm main: -Nhập 2 vectơ -Tính và in tổng a+b NIIT.vn 38
  • Bài tập4. Xây dựng lớp ma trận gồm các thành phần: -DL: số dòng, số cột, mảng các phần tử -Pt: nhập, in, kiểm tra ma trận có là đơn vị khôngHàm main: -Nhập ma trận a -Thông báo có là ma trận đơn vị không -In ma trận NIIT.vn 39
  • Bài tập5. Xây dựng lớp sinh viên gồm các thành phần: -DL: họ tên, ngày sinh, giới tính, lớp ,điểm toán, lý, hóa, đtb -Pt: nhập, in, tính điểm trung bìnhHàm main: -Nhập danh sách sinh viên -Sắp xếp theo điểm trung bình giảm dần -In danh sách sau khi sắp xếp NIIT.vn 40
  • Bài tập6. Xây dựng lớp hóa đơn gồm các thành phần: -DL: mã vật tư, tên vật tư, loại phiếu, ngày lập, khối lượng, đơn giá, thành tiền -Pt: nhập, in, kiểm tra phiếu nhập hay xuấtHàm main: -Nhập danh sách hóa đơn -Tính thành tiền cho các hóa đơn và in tổng thành tiền -In danh sách sau khi xếp theo số tiền giảm dần NIIT.vn 41
  • Bạn đã biết cần phải làm gì? NIIT.vn
  • Mọi thắc mắc sẽ được giải đáp trong khóa họcLậP TRÌNH WEB VớI JAVA/JSP/SERVLET tạiHọc viện NIIT INET Liên hệ: 0904 840 550 (Ms Mai) Email: maintn@inet.vn NIIT.vn