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 đủ
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:
bai_giang_phuong_phap_lap_trinh_huong_doi_tuong_chuong_5_van.pdf

