Dùng thành phần tĩnh để xây dựng bộ đếm đối tượng cho lớp. Dùng thành phần tĩnh để xây dựng bộ đếm đối tượng cho lớp Time Time[r]
(1)Thành phần tĩnh,
Thành phần tĩnh,
Ba vấn đề trỏ
(2)Nội dung
Nội dung
(3)Nội dung
Nội dung
(4)Thành phần tĩnh
Thành phần tĩnh
Thành phần lớp (class members):Thành phần lớp (class members):
Thành phần đối tượng (instance members).Thành phần đối tượng (instance members).
Thuộc tính phương thức thơng thường.Thuộc tính phương thức thơng thường Mỗi đối tượng có riêng.Mỗi đối tượng có riêng
Thành phần tĩnh (static members).Thành phần tĩnh (static members).
Thuộc tính phương thức tĩnh.Thuộc tính phương thức tĩnh Các đối tượng dùng chung.Các đối tượng dùng chung
p1: PhanSo
Tử số Mẫu số
p1: PhanSo Tử số
Mẫu số 22 1
PhanSo
Tử số Mẫu số
Giá trị lớn nhất
PhanSo
Tử số Mẫu số
Giá trị lớn nhất p2: PhanSo
Tử số
p2: PhanSo
Tử số 22
Thành phần dùng chung cho MỌI đối tượng lớp!!
(5)Thành phần tĩnh
Thành phần tĩnh
Khai báo sử dụng:Khai báo sử dụng:
Dùng từ khóa static.Dùng từ khóa static.
Truy xuất tốn tử ::.Truy xuất toán tử ::.
class PhanSo class PhanSo { { private: private:
static int m_giaTriLN; static int m_giaTriLN; public:
public:
static int layGiaTriLN(); static int layGiaTriLN(); private:
private:
int
int m_tuSo;m_tuSo; int
int m_mauSo;m_mauSo;
PhanSo::m_giaTriLN = 10000; PhanSo::m_giaTriLN = 10000; void main()
void main()
{
{
PhanSo p1(1, 2);
PhanSo p1(1, 2);
PhanSo p2(2, 3);
PhanSo p2(2, 3);
int x1 = PhanSo::layGiaTriLN(); int x1 = PhanSo::layGiaTriLN(); int x2 = p1.layGiaTriLN();
(6)Nội dung
Nội dung
Thành phần tĩnh.Thành phần tĩnh.
(7)Ba vấn đề trỏ
Ba vấn đề trỏ Ví dụ 1:Ví dụ 1:
class Array class Array { { private: private: int
int m_size;m_size; int
int *m_data;*m_data; public: public: Array(int size); Array(int size); }; }; Array::Array(int size) Array::Array(int size) { {
m_size = size;
m_size = size;
m_data = new int[m_size];
m_data = new int[m_size];
void main()
void main()
{
{
Array a1(5);
Array a1(5);
…
…
}
(8)Ba vấn đề trỏ
Ba vấn đề trỏ Vấn đề rò rỉ nhớ:Vấn đề rò rỉ nhớ:
Lớp có thuộc tính trỏ.Lớp có thuộc tính trỏ.
Đối tượng lớp bị hủy, nhớ không thu hồi.Đối tượng lớp bị hủy, nhớ không thu hồi.
a1: Array m_size
m_data
a1: Array
m_size m_data
Phải dùng hàm hủy để dọn dẹp!!
Phải dùng hàm hủy để dọn dẹp!!
1 22 33 44 55 101
101
Rò rỉ nhớ!!
Rò rỉ nhớ!!
(9)Ba vấn đề trỏ
Ba vấn đề trỏ Ví dụ 1:Ví dụ 1:
class Array class Array { { private: private: int
int m_size;m_size; int
int *m_data;*m_data; public: public: Array(int size); Array(int size); ~Array(); ~Array(); }; }; Array::~Array() Array::~Array() { { delete m_data; delete m_data; void main() void main() { {
Array a1(5);
Array a1(5);
…
…
}
(10)Ba vấn đề trỏ
Ba vấn đề trỏ Ví dụ 2:Ví dụ 2:
class Array
class Array
{
{
private:
private:
int
int m_size;m_size; int
int *m_data;*m_data; public:
public:
Array(int size);
Array(int size);
~Array();
~Array();
};
};
void main()
void main()
{
{
Array a1(5);
Array a1(5);
Array a2(a1);
Array a2(a1);
…
…
}
(11)Ba vấn đề trỏ
Ba vấn đề trỏ
Vấn đề chép nhớ (hdsc mặc định):Vấn đề chép nhớ (hdsc mặc định):
Hàm dựng chép mặc định chép giá trị Hàm dựng chép mặc định chép giá trị thuộc tính.
thuộc tính.
a1: Array m_size
m_data
a1: Array
m_size m_data
Phải cài đặt lại hàm dựng chép!!
Phải cài đặt lại hàm dựng chép!!
1 22 33 44 55 101
101 5
a2: Array m_size
m_data
a2: Array
m_size m_data
101 101 5
Dùng chung bộ nhớ!!
Dùng chung
(12)Ba vấn đề trỏ
Ba vấn đề trỏ Ví dụ 2:Ví dụ 2:
class Array class Array { { private: private: int
int m_size;m_size; int
int *m_data;*m_data; public:
public:
Array(int size);
Array(int size);
Array(const Array &a); Array(const Array &a); ~Array(); ~Array(); }; }; void main() void main() { {
Array a1(5);
Array a1(5);
Array a2(a1);
Array a2(a1);
…
…
Array::Array(const Array &a) Array::Array(const Array &a) {
{
m_size = a.m_size; m_size = a.m_size;
m_data = new int[m_size]; m_data = new int[m_size]; for (int i = 0; i < m_size; i++) for (int i = 0; i < m_size; i++)
m_data[ i ] = a.m_data[ i ];
m_data[ i ] = a.m_data[ i ];
(13)Ba vấn đề trỏ
Ba vấn đề trỏ Ví dụ 3:Ví dụ 3:
class Array class Array { { private: private: int
int m_size;m_size; int
int *m_data;*m_data; public:
public:
Array(int size);
Array(int size);
Array(const Array &a);
Array(const Array &a);
~Array(); ~Array(); }; }; void main() void main() { {
Array a1(5);
Array a1(5);
Array a2(6);
Array a2(6);
…
…
a2 = a1;
a2 = a1;
…
…
}
(14)Ba vấn đề trỏ
Ba vấn đề trỏ
Vấn đề chép nhớ (ttg mặc định):Vấn đề chép nhớ (ttg mặc định):
Toán tử gán mặc định chép giá trị thuộc Toán tử gán mặc định chép giá trị thuộc tính. tính. a1: Array m_size m_data a1: Array m_size m_data
Phải cài đặt lại toán tử gán!!
Phải cài đặt lại toán tử gán!!
1 22 33 44 55 101 101 5 a2: Array m_size m_data a2: Array m_size m_data 405 405 6
1 22 33 44 55 66 101
101 5
Rò rỉ nhớ!!
Rò rỉ nhớ!!
Dùng chung bộ nhớ!!
Dùng chung
(15)Ba vấn đề trỏ
Ba vấn đề trỏ Ví dụ 2:Ví dụ 2:
class Array class Array { { private: private: int
int m_size;m_size; int
int *m_data;*m_data; public:
public:
Array(int size);
Array(int size);
Array(const Array &a);
Array(const Array &a);
~Array();
~Array();
Array & operator =(const Array &a); Array & operator =(const Array &a); }; }; void main() void main() { {
Array a1(5); Array a1(5); Array a2(6); Array a2(6); …
…
Array & Array::operator =(const Array &a) Array & Array::operator =(const Array &a) {
{
delete m_data; delete m_data;
m_size = a.m_size; m_size = a.m_size;
m_data = new int[m_size]; m_data = new int[m_size]; for (int i = 0; i < m_size; i++) for (int i = 0; i < m_size; i++) m_data[ i ] = a.m_data[ i ];
m_data[ i ] = a.m_data[ i ];
return *this;
return *this; }
(16)Ba vấn đề trỏ
Ba vấn đề trỏ
Dr Guru khuyên: Dr Guru khuyên: luật “ba ông lớn”luật “ba ông lớn”
Lớp có thuộc tính trỏ, phải ln kèm theo:Lớp có thuộc tính trỏ, phải ln kèm theo:
Hàm hủy: thu hồi nhớ.Hàm hủy: thu hồi nhớ
Hàm dựng chép: chép nhớ.Hàm dựng chép: chép nhớ Toán tử gán: chép nhớ.Toán tử gán: chép nhớ
class HocSinh
class HocSinh
{
{
private:
private:
char
char *m_hoTen;*m_hoTen; public:
public:
HocSinh(const HocSinh &h); HocSinh(const HocSinh &h); ~HocSinh();
(17)Tóm tắt
Tóm tắt
Thành phần tĩnh:Thành phần tĩnh:
Thuộc tính phương thức thuộc phạm vi lớp.Thuộc tính phương thức thuộc phạm vi lớp.
Các đối tượng dùng chung thành phần tĩnh lớp.Các đối tượng dùng chung thành phần tĩnh lớp. Phương thức tĩnh truy xuất thành phần tĩnh.Phương thức tĩnh truy xuất thành phần tĩnh.
Ba vấn đề trỏ:Ba vấn đề trỏ:
Khi lớp có thuộc tính trỏ:Khi lớp có thuộc tính trỏ:
Phải có hàm hủy.Phải có hàm hủy
(18)Nội dung
Nội dung
(19)Bài tập
Bài tập
Bài tập 5.1:Bài tập 5.1:
Dùng thành phần tĩnh để xây dựng đếm đối tượng cho lớp
Dùng thành phần tĩnh để xây dựng đếm đối tượng cho lớp TimeTime
(Gợi ý) (Gợi ý)
Khai báo thuộc tính tĩnh lưu số đối tượng tạo ra.Khai báo thuộc tính tĩnh lưu số đối tượng tạo Tăng giá trị thuộc tính khởi tạo đối tượng.Tăng giá trị thuộc tính khởi tạo đối tượng
Giảm giá trị thuộc tính hủy đối tượng.Giảm giá trị thuộc tính hủy đối tượng
(20)Bài tập
Bài tập
Bài tập 5.2:Bài tập 5.2: Bổ sung vào lớp
Bổ sung vào lớp DateDate phương thức tĩnh cho phép tạo đối tượng từ phương thức tĩnh cho phép tạo đối tượng từ chuỗi “dd/MM/yyyy” cho trước
chuỗi “dd/MM/yyyy” cho trước
(Gợi ý) (Gợi ý)
(21)Bài tập
Bài tập
Bài tập 5.3:Bài tập 5.3: Xây dựng lớp
Xây dựng lớp đa thứcđa thức có phương thức sau: có phương thức sau:
(Nhóm tạo hủy) (Nhóm tạo hủy)
Khởi tạo mặc định đa thức = 0.Khởi tạo mặc định đa thức =
Khởi tạo với bậc mảng hệ số cho trước.Khởi tạo với bậc mảng hệ số cho trước Khởi tạo từ đối tượng đa thức khác.Khởi tạo từ đối tượng đa thức khác Hủy đa thức, thu hồi nhớ.Hủy đa thức, thu hồi nhớ
(Nhóm truy xuất thơng tin) (Nhóm truy xuất thơng tin)
Lấy bậc đa thức.Lấy bậc đa thức
(22)Bài tập
Bài tập
Bài tập 5.3:Bài tập 5.3: Xây dựng lớp
Xây dựng lớp đa thứcđa thức (tiếp theo): (tiếp theo):
(Nhóm xử lý nghiệp vụ) (Nhóm xử lý nghiệp vụ)
So sánh với đa thức khác.So sánh với đa thức khác Rút gọn đa thức.Rút gọn đa thức
Tính giá trị, đạo hàm, nguyên hàm.Tính giá trị, đạo hàm, nguyên hàm (Nhóm tốn tử)
(Nhóm tốn tử)
Toán tử số học: +, -, *, /, =.Toán tử số học: +, -, *, /, =
(23)Bài tập
Bài tập
Bài tập 5.4:Bài tập 5.4: Xây dựng lớp
Xây dựng lớp chuỗichuỗi có phương thức sau: có phương thức sau:
(Nhóm tạo hủy) (Nhóm tạo hủy)
Khởi tạo mặc định chuỗi rỗng.Khởi tạo mặc định chuỗi rỗng
Khởi tạo với từ chuỗi ký tự cho trước Khởi tạo với từ chuỗi ký tự cho trước Khởi tạo từ đối tượng chuỗi khác.Khởi tạo từ đối tượng chuỗi khác Hủy chuỗi, thu hồi nhớ.Hủy chuỗi, thu hồi nhớ
(Nhóm truy xuất thơng tin) (Nhóm truy xuất thơng tin)
(24)Bài tập
Bài tập
Bài tập 5.4:Bài tập 5.4: Xây dựng lớp
Xây dựng lớp chuỗichuỗi (tiếp theo): (tiếp theo):
(Nhóm xử lý nghiệp vụ) (Nhóm xử lý nghiệp vụ)
So sánh với chuỗi khác.So sánh với chuỗi khác Đổi chữ hoa, thường.Đổi chữ hoa, thường Tìm chuỗi con.Tìm chuỗi
Trích chuỗi con.Trích chuỗi (Nhóm tốn tử)
(Nhóm tốn tử)
Toán tử số học: +, =, +=.Toán tử số học: +, =, +=
Toán tử so sánh: >, <, ==, >=, <=, !=Toán tử so sánh: >, <, ==, >=, <=, != Toán tử mảng: [ ].Toán tử mảng: [ ]