lap trinh huong doi tuong

24 5 0
lap trinh huong doi tuong

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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: Arraym_size

m_data

a1: Array

m_sizem_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: Arraym_size

m_data

a1: Array

m_sizem_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: Arraym_size

m_data

a2: Array

m_sizem_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: Arraym_sizem_data a1: Arraym_sizem_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: Arraym_sizem_data a2: Arraym_sizem_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: [ ]

Ngày đăng: 16/05/2021, 02:30

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan