Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (142.69 KB, 31 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1></div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>
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
<b>class</b> Employee // khai báo tên lớp
{
<b>private</b>: // từ khóa cho biết khơng thể truy nhập từ ngồi lớp
<b>unsigned int</b> EmpID ; // member data
<b>char </b>EmpName[30];
<b>float </b>EmpSalary;
<b>public</b>: // từ khóa cho biết có thể truy nhập từ ngồi lớp
<b>void</b> AddEmployee(); // member function
Phần được khai báo với từ khóa
private chỉ được truy nhập bởi các
Đặ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
Dữ liệu thành phần
Nên được khai báo với từ khố private.
Khơng được khởi tạo giá trị của dữ liệu thành
Hàm thành phần
<b>void Product :: Display (void)</b>
<b>{</b>
<b>cout << ProductName;</b>
<b>}</b>
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 ở
Dùng để truy nhập tới các dữ liệu thành
phần tĩnh.
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.
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
Một lớp có thể có nhiều hàm tạo với các tham số
class Date
{
public:
// hàm tạo với các 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
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);
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;
Đố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);
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;
Hàm thành phần của d2 truy
nhập trực tiếp tới dữ liệu day
của nó
Hàm thành phần của d2 truy
nhập tới dữ liệu day của
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);
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)
{
Const member function có thể được cả đối tượng const và
non-const viện dẫn, nhưng non-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
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;