Bài thực hành 3. Sử dụng thư điện tử

Chia sẻ bởi Đặng Anh Tuấn | Ngày 29/04/2019 | 54

Chia sẻ tài liệu: Bài thực hành 3. Sử dụng thư điện tử thuộc Tin học 9

Nội dung tài liệu:

CHƯƠNG 3: LỚP (Class)
Nội dung chính
Lớp và các thành phần của lớp
Cài đặt các thành phần của lớp
Các thành phần tĩnh của lớp
Lớp lồng
Đối tượng
Hàm tạo và hàm huỷ
Sử dụng đối tượng
1. Lớp và các thành phần của lớp
Lớp trong C++ cho phép người lập trình tự định nghĩa các kiểu dữ liệu phức tạp (user-defined types) và được sử dụng tương tự như kiểu dữ liệu có sẵn (built-in data types).
Lớp thường được sử dụng để định nghĩa các 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 (implementation) và phần giao diện (interface).
Định nghĩa lớp …
Một lớp có chứa dữ liệu (member data) và hàm (member function).
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ừ ngoài lớp
unsigned int EmpID ; // member data
char EmpName[30];
float EmpSalary;
public: // từ khóa cho biết có thể truy nhập từ ngoài lớp
void AddEmployee(); // member function
};
Điều khiển truy nhập
Ẩn dữ liệu
Ẩn dữ liệu là kỹ thuật bảo vệ dữ liệu khỏi những truy nhập không hợp lệ.
Đặt dữ liệu vào lớp với từ khóa private
Dữ liệu private chỉ được truy nhập bên trong lớp
Dữ liệu hoặc hàm public có thể được truy nhập từ bên ngoài lớp.
2. Cài đặt các thành phần của lớp
Dữ liệu thành phần
Nên được khai báo với từ khoá private.
Không được khởi tạo giá trị của dữ liệu thành phần trong định nghĩa lớp.
Cài đặt các thành phần của lớp
Hàm thành phần
void Product :: Display (void)
{
cout << ProductName;
}
Cài đặt bên ngoài lớp Cài đặt bên trong lớp
Cài đặt bên ngoài lớp thường đơn giản và dễ hiểu hơn
3. Các thành phần tĩnh của lớp
Dữ liệu thành phần tĩnh
Là thành phần dữ liệu có giá trị như nhau đối với tất cả các đối tượng của lớp.
Sự tồn tại của dữ liệu thành phần tĩnh không phụ thuộc vào sự tồn tại của đối tượng thuộc lớp.
Sau khi khai báo thành phần dữ liệu tĩnh ở trong lớp, phải khởi tạo giá trị cho nó ở bên ngoài lớp.
Ví dụ: thành phần dữ liệu tĩnh
Các thành phần tĩnh của lớp
Hàm thành phần tĩnh
Dùng để truy nhập tới các dữ liệu thành phần tĩnh.
Luôn được định nghĩa ở bên ngoài lớp
Ví dụ: hàm thành phần tĩnh
4. Lớp lồng
Là lớp được khai báo hoặc định nghĩa trong một lớp khác.
Đối tượng của lớp bên ngoài có chứa tham chiếu tới đối tượng của lớp lồng.
Các thành phần của lớp lồng được khai báo và định nghĩa tương tự lớp ở bên ngoài
Ví dụ: khai báo lớp lồng
5. Đối tượng
Đối tượng là một thể hiện cụ thể của một lớp
Sử dụng toán tử “.” để truy nhập vào các thành phần của đối tượng
Chú ý: phạm vi truy nhập (public/private)
Ví dụ: Khai báo đối tượng
Đối tượng của lớp lồng
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
6. Hàm tạo (Constructor)
Hàm tạo là một hàm thành phần được tự động viện dẫn khi khởi tạo một đối tượng mới của lớp.
Hàm tạo phải có tên trùng với tên lớp và không có giá trị trả về.
Nếu không khai báo hàm tạo thì một hàm tạo mặc định sẽ tự động được tạo ra.
Nếu đã khai báo hàm tạo thì không tự động có hàm tạo mặc định
Ví dụ: Hàm tạo mặc định
Chồng hàm tạo
Một lớp có thể có nhiều hàm tạo với các tham số khác nhau (chồng hàm tạo)
Hàm tạo với giá trị mặc định
class Date
{
public:
// hàm tạo với các giá trị mặc định củ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
Date d4(12,10,1998); // 12.10.1998
}
Hàm tạo sao chép
Hàm tạo sao chép khởi tạo đối tượng dựa trên một đối tượng khác thuộc cùng lớp.
Mỗi lớp có một hàm tạo sao chép mặc định – có một tham số là đối tượng của cùng một lớp.
Ta có thể định nghĩa lại hàm tạo sao chép.
Date(Date& d)
Ví dụ
void main()
{
Date d1(12,4,1997);
Date d2(d1); // hàm tạo sao chép mặc định
Date d3=d1; // hàm tạo sao chép mặc định
}
Hàm hủy (Destructor)
Hàm hủy tự động được gọi khi đối tượng bị hủy
Hàm hủy thường được sử dụng để giải phóng bộ nhớ
Ví dụ:
class Date
{
public:
Date(); // hàm tạo
~Date(); // hàm hủy
};


if
{
Date d1;
} // kết thúc khối lệnh hàm hủy sẽ được viện dẫn để hủy d1.
7. Sử dụng đối tượng
Đối tượng làm tham số để truyền cho các hàm tương tự như các kiểu xây dựng sẵn khác.
class Date
{
int diff(Date d); // Tính khoảng thời gian giữa 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);
cout << d1.diff(d2) << endl;
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;
d2.add_days(d1,65); // d2 gán bằng 29.7.2000
Ví dụ: Đối tượng làm tham số
Hàm trả về đố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);
Date d2=d1.get_date(65); // d2 gán bằng 29.7.2000
Hàm thành phần hằng
Hàm thành phần được khai báo với từ khóa const thì sẽ không thể thay đổi dữ liệu của đố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)
{
year+=n;
}
Hàm thành phần hằng ...
Const member function có thể được cả đối tượng const và non-const viện dẫn, nhưng non-const member function thì chỉ được các đố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
}
Tự tham chiếu (Self-Reference)
Mỗi hàm thành phần biết đối tượng nào viện dẫn nó và có thể truy cập tới đối tượng đó một cách rõ ràng thông qua con 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;
return temp;
}
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Đặng Anh Tuấn
Dung lượng: | Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)