Nếu lớp lồng được khai báo với từ khoá private thì đối tượng của lớp lồng chỉ được tạo ra trong thân của lớp ngoài. Các quy tắc truy nhập khác vấn được áp dụng.[r]
(1)(2)Nội dung chính
Lớp thành phần lớp Cài đặt thành phần lớp Các thành phần tĩnh lớp
Lớp lồng Đối tượng
(3)1 Lớp thành phần lớp
Lớp C++ cho phép người lập trình tự
định nghĩa kiểu liệu phức tạp
(user-defined types) sử dụng tương tự kiểu liệu có sẵn (built-in data types)
Lớp thường sử dụng để định nghĩa
vấn đề trừu tượng như: số phức, ngày tháng, vector …
Lớp cho phép tách rời phần cài đặt
(4)Định nghĩa lớp …
Một lớp có chứa liệu (member data)
và hàm (member function).
(5)Khai báo lớp
class Employee // khai báo tên lớp
{
private: // từ khóa cho biết khơng thể truy nhập từ lớp
unsigned int EmpID ; // member data
char EmpName[30]; float EmpSalary;
public: // từ khóa cho biết truy nhập từ lớp
void AddEmployee(); // member function
(6)Điều khiển truy nhập Class private: public: data1 data2 functiond() functiona() functionb() functionc()
Phần khai báo với từ khóa private truy nhập hàm thành phần class
(7)Ẩn liệu
Ẩn liệu kỹ thuật bảo vệ liệu
khỏi truy nhập không hợp lệ.
Đặt liệu vào lớp với từ khóa private Dữ liệu private truy nhập bên
trong lớp
Dữ liệu hàm public truy
(8)2 Cài đặt thành phần lớp
Dữ liệu thành phần
Nên khai báo với từ khố private
Khơng khởi tạo giá trị liệu thành
(9)Cài đặt thành phần lớp
Hàm thành phần
void Product :: Display (void) {
cout << ProductName; }
(10)3 Các thành phần tĩnh lớp
Dữ liệu thành phần tĩnh
Là thành phần liệu có giá trị
đối với tất đối tượng lớp
Sự tồn liệu thành phần tĩnh
không phụ thuộc vào tồn đối tượng thuộc lớp
Sau khai báo thành phần liệu tĩnh
(11)(12)Các thành phần tĩnh lớp
Hàm thành phần tĩnh
Dùng để truy nhập tới liệu thành
phần tĩnh
(13)(14)4 Lớp lồng
Là lớp khai báo định nghĩa
trong lớp khác.
Đối tượng lớp bên ngồi có chứa
tham chiếu tới đối tượng lớp lồng.
Các thành phần lớp lồng khai
(15)(16)5 Đối tượng
Đối tượng thể cụ thể
một lớp
Sử dụng toán tử “.” để truy nhập vào
các thành phần đối tượng
(17)(18)Đối tượng lớp lồng
Nếu lớp lồng khai báo với từ khố private đối tượng lớp lồng tạo thân lớp
(19)6 Hàm tạo (Constructor)
Hàm tạo hàm thành phần tự
động viện dẫn khởi tạo đối tượng lớp
Hàm tạo phải có tên trùng với tên lớp
khơng có giá trị trả
Nếu khơng khai báo hàm tạo hàm tạo
mặc định tự động tạo
Nếu khai báo hàm tạo khơng tự động
(20)(21)Chồng hàm tạo
Một lớp có nhiều hàm tạo với tham số
(22)Hàm tạo với giá trị mặc định
class Date {
public:
// hàm tạo với giá trị mặc định cuủa day, month, year
Date(int d=1, int m=1, int y=1900); };
Date::Date(int d, int m, int y) : day(d), month(m), year(y) {}
void main() {
Date d1; // 1.1.1900
Date d2(5); // 5.1.1900 Date d3(15,8); // 15.8.1900
(23)Hàm tạo chép
Hàm tạo chép khởi tạo đối tượng dựa đối tượng khác thuộc lớp
Mỗi lớp có hàm tạo chép mặc định – có tham số đối tượng lớp
Ta định nghĩa lại hàm tạo chép
Date(Date& d)
Ví dụ
void main() {
Date d1(12,4,1997);
(24)Hàm hủy (Destructor)
Hàm hủy tự động gọi đối tượng bị hủy
Hàm hủy thường sử dụng để giải phóng nhớ Ví dụ:
class Date {
public:
Date(); // hàm tạo ~Date(); // hàm hủy };
if {
Date d1;
(25)7 Sử dụng đối tượng
Đối tượng làm tham số để truyền cho hàm tương
tự kiểu xây dựng sẵn khác
class Date {
int diff(Date d); // Tính khoảng thời gian hai ngày };
int Date::diff(Date d) {
int n=day-d.day;
n+= 30 * (month – d.month); n+= 365* (year – d.year); return n;
}
Date d1(14,5,2000); Date d2(10,4,2000);
(26)Ví dụ: Đối tượng làm tham số
class Date {
void add_days (Date d, int n); // cộng thêm n ngày };
void Date::add_days(Date d, int n) {
day=d.day + n % 30;
month = d.month + (n % 365) / 30; year = d.year + n / 365;
}
Date d1(14,5,2000); Date d2;
(27)Ví dụ: Đối tượng làm tham số object d2 day month year object d1 day month year d2.add_days(d1,65); day d1.day
Hàm thành phần d2 truy nhập trực tiếp tới liệu day
của
Hàm thành phần d2 truy nhập tới liệu day
(28)Hàm trả đối tượng
class Date {
Date get_date (int n); };
Date Date::get_date(int n) {
Date temp;
temp.day=day + n % 30;
temp.month = month + (n % 365) / 30; temp.year = year + n / 365;
return temp; }
Date d1(14,5,2000);
(29)Hàm thành phần hằng
Hàm thành phần khai báo với từ khóa const khơng thể thay đổi liệu đối tượng
class Date {
int year() const; // const
void add_year(int n); // non-const };
int Date::year() const {
return year; }
int Date::add_year(int n) {
(30)Hàm thành phần
Const member function đối tượng const non-const viện dẫn, non-non-const member function đối tượng non-const viện dẫn
void f(Date& d, const Date& cd) {
int i=d.year(); // ok d.add_year(2); // ok int j=cd.year(); // ok
cd.add_year(3); // error
(31)Tự tham chiếu (Self-Reference)
Mỗi hàm thành phần biết đối tượng viện dẫn truy cập
tới đối tượng cách rõ ràng thơng qua trỏ this
class Date {
Date get_date (int n); };
Date Date::get_date(int n) {
Date temp;
temp.day=this.day + n % 30;
temp.month = this.month + (n % 365) / 30; temp.year = this.year + n / 365;