Bài giảng Kỹ thuật lập trình - Chương 5: Lớp và đối tượng
5.1 Khái niệm
Đối tượng là gì?
Thực thể phần mềm
Mô hình/₫ại diện của một ₫ối tượng vật lý:
— Tank, Heater, Furnace
— Motor, Pump, Valve
— Sensor, Thermometer, Flowmeter
— Control Loop, Control System
Hoặc một ₫ối tượng logic ("conceptual object):
— Trend, Report, Button, Window
— Matrix, Vector, Polynomia
Đối tượng là gì?
Thực thể phần mềm
Mô hình/₫ại diện của một ₫ối tượng vật lý:
— Tank, Heater, Furnace
— Motor, Pump, Valve
— Sensor, Thermometer, Flowmeter
— Control Loop, Control System
Hoặc một ₫ối tượng logic ("conceptual object):
— Trend, Report, Button, Window
— Matrix, Vector, Polynomia
Bạn đang xem tài liệu "Bài giảng Kỹ thuật lập trình - Chương 5: Lớp và đối tượng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_ky_thuat_lap_trinh_chuong_5_lop_va_oi_tuong.pdf
Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 5: Lớp và đối tượng
- 5.3 Biến thành viên Khai báo biếnthànhviêncủamộtlớptương tự như cấutrúc class Time { public: int hour, min, sec; }; Mặc ₫ịnh, các biếnthànhviêncủamộtlớp không truy nhập ₫ượctừ bên ngoài (biếnriêng), ₫ương nhiên cũng không khởi tạo ₫ượctheocáchcổ₫iển: Time t = {1, 0, 0}; // error! t.hour = 2; // error! Có thể làm cho mộtbiếnthànhviêntruynhập ₫ượctừ bên ngoài (biếncôngcộng), tuy nhiên ít khi có lý do cầnlàmnhư thế: class Point { public: int x,y; }; Chương 5: Lớpvàđốitượng © 2007 AC-HUT 11
- Kiểmsoátviệctruynhập các biếnriêngthôngqua cáchàm thành viên Cách duy nhất ₫ể khởitạogiátrị cho các biếnthànhviênlàsử dụng hàm tạo: class Time { public: Time() {hour=min=sec=0;} }; Time t; // t.hour = t.min = t.sec = 0; Mộtsố biến thành viên có vai trò lưutrữ trạng thái bên trong của ₫ốitượng, không nên cho truy nhậptừ bên ngoài (ngay cả gián tiếpqua cáchàm) class PID { double Kp, Ti, Td; // controller parameters double I; // internal state }; Chương 5: Lớpvàđốitượng © 2007 AC-HUT 12
- 5.4 Hàm thành viên Định nghĩacấutrúc& hàm Định nghĩalớp struct Time { class Time { int hour, min, sec int hour,min,sec; }; public: void addHour(Time& t, int h) { void addHour(int h) { t.hour += h; hour += h; } } }; Gọihàmvớibiếncấutrúc Gọihàmthànhviêncủa ĐT Time t; Time t; addHour(t,5); t.addHour(5); Ở₫ây có sự khác nhau về cách viết, nhưng chưacósự khác nhau cơ bản Chương 5: Lớpvàđốitượng © 2007 AC-HUT 13
- Khai báo và ₫ịnh nghĩahàmthànhviên Thông thường, lớp cùng các hàm thành viên ₫ược khai báo trong tệptin ₫ầu(*.h). Vídụ trong tệp có tên “mytime.h”: class Time { int hour,min,sec; public: void addHour(int h); void addMin(int m); void addSec(int s); }; Các hàm thường ₫ược ₫ịnh nghĩa trong tệptin nguồn(*.cpp): #include “mytime.h” void Time::addHour(int h) { hour += h; } Chương 5: Lớpvàđốitượng © 2007 AC-HUT 14
- Có thể₫ịnh nghĩamộthàmthànhviêntrongtệptin ₫ầudướidạng mộthàminline (chỉ nên áp dụng vớihàm₫ơngiản), ví dụ: inline void Time::addHour(int h) { hour += h;} Mộthàmthànhviêncũng có thể₫ược ₫ịnh nghĩatrongphần khai báo lớp=> mặc ₫ịnh trở thành hàm inline, ví dụ class Time { int hour,min,sec; public: void addHour(int h) { hour += h; } }; Khi ₫ịnh nghĩa hàm thành viên, có thể sử dụng các biếnthành viên và gọihàmthànhviênkhácmàkhông cần (thậm chí không thể₫ược) ₫ưatênbiến ₫ốitượng, ví dụ: void Time::addSec(int s) { addMin(sec/60); } Chương 5: Lớpvàđốitượng © 2007 AC-HUT 15
- Bảnchấtcủa hàm thành viên? class Time { int hour,min,sec; public: Time() { hour=min=sec=0; } void addHour(int h) { this->hour += h;// con trỏ this chính là ₫ịachỉ của }// ₫ốitượng gọi hàm thành viên }; void main() { Time t1,t2; // Tự₫ộng gọihàmtạo Time() cho t1 và t2 t1.addHour(5); // Có thể hiểunhư là addHour(&t1,5); t2 = t1; // OK t2.addHour(5); // Có thể hiểunhư là addHour(&t2,5); } Chương 5: Lớpvàđốitượng © 2007 AC-HUT 16
- 5.5 Kiểm soát truy nhập public: Các thành viên công cộng, có thể sử dụng ₫ượctừ bên ngoài private: Các thành viên riêng, không thể truy nhập ₫ượctừ bên ngoài, ngay cả trong lớpdẫnxuất(sẽ₫ềcậpsau) class Time { private: int hour,min,sec; }; Mặc ₫ịnh, khi ₫ã khai báo class thì các thành viên là private. protected: Các thành viên ₫ượcbảovệ, không thể truy nhập ₫ượctừ bên ngoài, nhưng truy nhập ₫ượccáclớpdẫnxuất(sẽ₫ề cậpsau) Chương 5: Lớpvàđốitượng © 2007 AC-HUT 17
- 5.6 Con trỏ₫ốitượng #include "mytime.h" void main() { Time t; // call constructor Time() t.addHour(5); Time *pt = &t; // pt is identical to this pointer pt->addSec(70); pt = new Time; // call constructor Time() pt->addMin(25); delete pt; pt = new Time[5]; // call constructor 5 times for (int i=0; i < 5; ++ i) pt[i].addSec(10); delete [] pt; } Chương 5: Lớpvàđốitượng © 2007 AC-HUT 18
- Bài tậpvề nhà Dựatrêncấu trúc Vector và các hàm liên quan ₫ãthựchiện trong chương 4, hãy xây dựng lớp ₫ốitượng Vector vớicáchàm thành viên cầnthiết. Khai báo mộtlớpthựchiệnlưutrữ thông tin củamộtlớpsinh viên gồmnhững thành phầnthuộctínhnhư sau: —Số hiệu sinh viên : Kiểusố nguyên —Họ và tên: Chuỗikýtự —Năm sinh: Kiểusố nguyên Khai báo và ₫ịnh nghĩamở rộng lớpquản lý sinh viên bằng các hàm thành viên thựchiệncácchứcnăng như sau: —Nhậphọ tên sinh viên —Nhậpsố hiệusinhviên —Nhậpnămsinh —Tìmvàhiểnthị thông tin sinh viên khi biếtmãsố Chương 5: Lớpvàđốitượng © 2007 AC-HUT 19