Bài giảng Phương pháp lập trình hướng đối tượng - Chương 5: Vấn đề con trỏ, tính đóng gói - Nguyễn Minh Huy

Vꢀn đꢁ con trꢂ,  
Tính đóng gói  
GV. Nguyꢀn Minh Huy  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
1
Nꢆi dung  
ꢀ Vꢇn đꢈ con trꢉ.  
ꢀ Tính đóng gói.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
2
Nꢆi dung  
ꢀ Vꢀn đꢁ con trꢂ.  
ꢀ Tính đóng gói.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
3
Vꢇn đꢈ con trꢉ  
ꢀ Các phương thꢊc mꢋc đꢌnh trong lꢂp:  
ꢀ Đưꢄc trình biên dꢌch cung cꢇp khi không khai báo.  
ꢀ Ba phương thꢊc mꢋc đꢌnh:  
ꢁ Phương thꢊc hꢍy mꢋc đꢌnh.  
ꢁ Phương thꢊc khꢎi tꢏo sao chép mꢋc đꢌnh.  
ꢁ Toán tꢐ gán mꢋc đꢌnh.  
void main()  
{
class PhanSo  
{
private:  
PhanSo p1( 1, 3 );  
// Mꢀc đꢁnh có phương thꢂc  
// khꢃi tꢄo sao chép.  
PhanSo p2( p1 );  
int m_tu;  
int m_mau;  
public:  
PhanSo( int tu, int mau );  
// Mꢀc đꢁnh có toán tꢅ gán.  
};  
p1 = p2;  
}
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
4
Vꢇn đꢈ con trꢉ  
ꢀ Ví dꢑ 1:  
void main()  
{
class Array  
{
Array a1(5);  
private:  
ꢒ
int  
int  
m_size;  
}
*m_data;  
public:  
Array(int size);  
};  
Array::Array(int size)  
{
m_size = size;  
m_data = new int[m_size];  
}
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
5
Vꢇn đꢈ con trꢉ  
ꢀ Vꢇn đꢈ hꢍy mꢋc đꢌnh:  
ꢀ Lꢂp có thuꢆc tính con trꢉ (có cꢇp phát bꢆ nhꢂ).  
ꢀ Phương thꢊc hꢍy mꢋc đꢌnh không thu hꢓi bꢆ nhꢂ!!  
a1: Array  
Rò rꢃ bꢄ nhꢅ!!  
ꢂm_size  
ꢂm_data  
5
101  
1 2 3 4 5  
Phꢆi cài đꢇt TƯꢈNG MINH phương thꢉc hꢊy đꢋ dꢌn dꢍp!!  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
6
Vꢇn đꢈ con trꢉ  
ꢀ Ví dꢑ 1:  
void main()  
{
class Array  
{
Array a1(5);  
private:  
ꢒ
int  
int  
m_size;  
}
*m_data;  
public:  
Array(int size);  
~Array();  
};  
Array::~Array()  
{
delete []m_data;  
}
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
7
Vꢇn đꢈ con trꢉ  
ꢀ Ví dꢑ 2:  
void main()  
{
class Array  
{
Array a1(5);  
private:  
Array a2(a1);  
ꢒ
int  
int  
m_size;  
*m_data;  
}
public:  
Array(int size);  
~Array();  
};  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
8
Vꢇn đꢈ con trꢉ  
ꢀ Vꢇn đꢈ sao chép mꢋc đꢌnh:  
ꢀ Phương thꢊc khꢎi tꢏo sao chép mꢋc đꢌnh sao chép  
giá trꢌ tꢔng thuꢆc tính!!  
Dùng chung  
Mꢀt bꢄ nhꢅ!!  
bꢄ nhꢅ!!  
a1: Array  
a2: Array  
ꢂm_size  
ꢂm_data  
ꢂm_size  
ꢂm_data  
5
101  
1 2 3 4 5  
Phꢆi cài đꢇt TƯꢈNG MINH phương thꢉc khꢎi tꢏo sao chép!!  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
9
Vꢇn đꢈ con trꢉ  
ꢀ Ví dꢑ 2:  
Array::Array(const Array &a)  
{
class Array  
{
m_size = a.m_size;  
m_data = new int[m_size];  
for (int i = 0; i < m_size; i++)  
m_data[ i ] = a.m_data[ i ];  
}
private:  
int  
int  
m_size;  
*m_data;  
public:  
Array(int size);  
Array(const Array &a);  
~Array();  
void main()  
{
};  
Array a1(5);  
Array a2(a1);  
ꢒ
}
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
10  
Vꢇn đꢈ con trꢉ  
ꢀ Ví dꢑ 3:  
void main()  
{
class Array  
{
Array a1(5);  
private:  
Array a2(6);  
int  
int  
m_size;  
ꢒ
*m_data;  
a2 = a1;  
ꢒ
public:  
Array(int size);  
Array(const Array &a);  
~Array();  
}
};  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
11  
Vꢇn đꢈ con trꢉ  
ꢀ Vꢇn đꢈ gán mꢋc đꢌnh:  
ꢀ Toán tꢐ gán mꢋc đꢌnh sao chép giá trꢌ tꢔng thuꢆc  
tính!!  
Dùng chung  
Rò rꢃ bꢄ nhꢅ!! Mꢀt bꢄ nhꢅ!!  
bꢄ nhꢅ!!  
a1: Array  
a2: Array  
1 2 3 4 5 6  
1 2 3 4 5  
ꢂm_size  
ꢂm_data  
ꢂm_size  
ꢂm_data  
5
6
101  
405  
Phꢆi cài đꢇt TƯꢈNG MINH toán tꢐ gán!!  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
12  
Vꢇn đꢈ con trꢉ  
ꢀ Ví dꢑ 2:  
Array & Array::operator =(const Array &a)  
{
class Array  
{
delete []m_data;  
private:  
m_size = a.m_size;  
int  
int  
m_size;  
m_data = new int[m_size];  
for (int i = 0; i < m_size; i++)  
m_data[ i ] = a.m_data[ i ];  
*m_data;  
public:  
Array(int size);  
Array(const Array &a);  
~Array();  
return *this;  
void main()  
}
{
Array & operator =(const Array &a);  
Array a1(5);  
Array a2(6);  
ꢒ
};  
a2 = a1;  
ꢒ
}
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
13  
Vꢇn đꢈ con trꢉ  
ꢀ Dr. Guru khuyên: luꢑt “ba ông lꢅn”  
ꢀ Lꢂp có thuꢆc tính con trꢉ (có cꢇp phát bꢆ nhꢂ),  
ꢃ Phꢕi cài đꢋt TƯꢖNG MINH:  
ꢁ Phương thꢊc hꢍy: thu hꢓi bꢆ nhꢂ.  
ꢁ Phương thꢊc khꢎi tꢏo sao chép: sao chép bꢆ nhꢂ.  
ꢁ Toán tꢐ gán: hꢍy bꢆ nhꢂ cũ, sao chép bꢆ nhꢂ mꢂi.  
class HocSinh  
{
private:  
char  
public:  
*m_hoTen;  
HocSinh(const HocSinh &h);  
~HocSinh();  
HocSinh & operator =(const HocSinh &h);  
};  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
14  
Nꢆi dung  
ꢀ Vꢇn đꢈ con trꢉ.  
ꢀ Tính đóng gói.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
15  
Tính đóng gói  
ꢀ Quy tꢗc hꢆp đen (rule of blackbox):  
ꢀ Thuꢆc tính: private đꢘ hꢏn chꢙ truy xuꢇt.  
ꢀ Phương thꢊc: public đꢘ cung cꢇp tính năng.  
class HocSinh  
{
private:  
char* m_hoTen;  
Dꢚ liꢛu  
float m_diemVan;  
float m_diemToan;  
(Thuꢆc tính)  
Tính năng  
};  
(Phương thꢊc)  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
16  
Tính đóng gói  
ꢀ Quy tꢗc hꢆp đen vs. Nhu cꢜu truy xuꢇt:  
ꢀ Có nhu cꢜu truy xuꢇt thuꢆc tính đꢃi tưꢄng?  
ꢁ Phương án 1: private ꢄ public.  
ꢁ Phương án 2: phương thꢊc truy xuꢇt.  
ꢃ Cꢕ 2 đꢈu vi phꢏm quy tꢗc hꢆp đen!!  
class HocSinh  
class HocSinh  
{
{
public:  
private:  
char* m_hoTen;  
char* m_hoTen;  
float  
float  
m_diemVan;  
m_diemToan;  
float  
float  
m_diemVan;  
m_diemToan;  
};  
public:  
float  
float  
layDiemVan();  
layDiemToan();  
};  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
17  
Tính đóng gói  
ꢀ Làm sao tuân thꢍ quy tꢗc hꢆp đen?  
ꢀ Cꢜn xꢐ lý gì thì đưa cho đꢃi tưꢄng thꢝc hiꢛn.  
class HocSinh  
{
void main()  
{
private:  
HocSinh hs;  
char* m_hoTen;  
float  
float  
public:  
m_diemVan;  
m_diemToan;  
// Cꢆn tính điꢇm trung bình??  
// Trang bꢁ cho hꢈc sinh tính.  
float dtb = hs.tinhDTB();  
float tinhDTB();  
int xepLoai();  
// Cꢆn xꢉp loꢄi??  
};  
// Trang bꢁ cho cho hꢈc sinh xꢉp.  
int loai = hs.xepLoai();  
}
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
18  
Tính đóng gói  
ꢀ Dr. Guru khuyên: quy tꢗc “Tell, Don’t Ask”.  
ꢀ Thông tin đꢃi tưꢄng  
ꢃ Không thꢘ truy xuꢇt tꢔ bên ngoài.  
ꢀ Đꢃi tưꢄng nꢗm giꢚ thông tin  
ꢃ Chꢌu trách nhiꢛm xꢐ lý thông tin.  
ꢀ “Đꢔng hꢉi tôi thông tin”  
ꢃ “Hãy nhꢞ tôi làm giùm!!”  
ꢀ Đã giao thông tin  
ꢃ Giao luôn xꢐ lý thông tin.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
19  
Tính đóng gói  
ꢀ Luyꢛn tꢁp:  
// Xuꢊt danh sách hꢈc sinh giꢋi??  
// (ĐTB >= 8.0)  
// Tính trꢈng tâm tam giác??  
class Diem  
class HocSinh  
{
{
private:  
private:  
float  
float  
m_X;  
m_Y;  
char  
float  
float  
*m_hoTen;  
m_diemVan;  
m_diemToan;  
};  
class TamGiac  
};  
{
class BangDiem  
private:  
{
Diem m_A;  
private:  
Diem m_B;  
Diem m_C;  
vector<HocSinh> m_danhSach;  
};  
};  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ GV. Nguyꢀn Minh Huy  
20  
Tải về để xem bản đầy đủ
pdf 24 trang myanh 27240 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Chương 5: Vấn đề con trỏ, tính đóng gói - Nguyễn Minh Huy", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_phuong_phap_lap_trinh_huong_doi_tuong_chuong_5_van.pdf