Tải bản đầy đủ (.ppt) (24 trang)

lap trinh huong doi tuong

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 (504.11 KB, 24 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>Thành phần tĩnh,</b>



<b>Thành phần tĩnh,</b>



<b>Ba vấn đề con trỏ</b>



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

Nội dung



Nội dung



</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

Nội dung



Nội dung



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

Thành phần tĩnh



Thành phần tĩnh



Thành phần của lớp (class members):

Thành phần của 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 và phương thức thơng thường.Thuộc tính và phương thức thơng thường.
 Mỗi đối tượng có bản sao riêng.Mỗi đối tượng có bản sao riêng.


Thành phần tĩnh (static members).

Thành phần tĩnh (static members).



 Thuộc tính và phương thức tĩnh.Thuộc tính và 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ố <sub>2</sub><sub>2</sub>
1
1


PhanSo


Tử số
Mẫu số


<b>Giá trị lớn nhất</b>


PhanSo


Tử số
Mẫu số


<b>Giá trị lớn nhất</b> p2: PhanSo


Tử số


p2: PhanSo


Tử số 22



<b>Thành phần dùng chung cho </b>
<b>MỌI đối tượng của lớp!!</b>


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

Thành phần tĩnh



Thành phần tĩnh



Khai báo và sử dụng:

Khai báo và sử dụng:



Dùng từ khóa static.

Dùng từ khóa static.



Truy xuất bằng toán tử ::.

Truy xuất bằng toán tử ::.



class PhanSo
class PhanSo
{
{
private:
private:


<b>static int m_giaTriLN;</b>
<b>static int m_giaTriLN;</b>
public:


public:


<b>static int layGiaTriLN();</b>
<b>static int layGiaTriLN();</b>
private:



private:


int


int m_tuSo;m_tuSo;
int


int m_mauSo;m_mauSo;


<b>PhanSo::m_giaTriLN = 10000;</b>
<b>PhanSo::m_giaTriLN = 10000;</b>
void main()


void main()


{


{


PhanSo p1(1, 2);


PhanSo p1(1, 2);


PhanSo p2(2, 3);


PhanSo p2(2, 3);


<b>int x1 = PhanSo::layGiaTriLN();</b>
<b>int x1 = PhanSo::layGiaTriLN();</b>


<b>int x2 = p1.layGiaTriLN();</b>


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

Nội dung



Nội dung



Thành phần tĩnh.

Thành phần tĩnh.



</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

Ba vấn đề con trỏ



Ba vấn đề con 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);







}


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

Ba vấn đề con trỏ



Ba vấn đề con trỏ


Vấn đề rò rỉ bộ nhớ:

Vấn đề rò rỉ bộ nhớ:



Lớp có thuộc tính con trỏ.

Lớp có thuộc tính con trỏ.



Đối tượng của lớp bị hủy, bộ nhớ không thu hồi.

Đối tượng của lớp bị hủy, bộ nhớ không thu hồi.



<b>a1: Array</b>


<b>m_size</b>


<b>m_data</b>


<b>a1: Array</b>



<b>m_size</b>
<b>m_data</b>


<b>Phải dùng hàm hủy để dọn dẹp!!</b>



<b>Phải dùng hàm hủy để dọn dẹp!!</b>


1


1 22 33 44 55
101


101



<b>Rò rỉ bộ nhớ!!</b>



<b>Rò rỉ bộ nhớ!!</b>


5


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

Ba vấn đề con trỏ



Ba vấn đề con 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);
<b>~Array();</b>
<b>~Array();</b>
};


};
<b>Array::~Array()</b>
<b>Array::~Array()</b>
<b>{</b>
<b>{</b>
<b>delete m_data;</b>
<b>delete m_data;</b>
void main()
void main()
{
{


Array a1(5);


Array a1(5);






}


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

Ba vấn đề con trỏ



Ba vấn đề con 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);






}


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

Ba vấn đề con trỏ



Ba vấn đề con trỏ



Vấn đề sao chép bộ nhớ (hdsc mặc định):

Vấn đề sao chép bộ nhớ (hdsc mặc định):



Hàm dựng sao chép mặc định sao chép giá trị từng

Hàm dựng sao chép mặc định sao chép giá trị từng



thuộc tính.



thuộc tính.



<b>a1: Array</b>


<b>m_size</b>


<b>m_data</b>


<b>a1: Array</b>



<b>m_size</b>
<b>m_data</b>


<b>Phải cài đặt lại hàm dựng sao chép!!</b>



<b>Phải cài đặt lại hàm dựng sao chép!!</b>


1


1 22 33 44 55
101


101
5
5


<b>a2: Array</b>


<b>m_size</b>


<b>m_data</b>



<b>a2: Array</b>



<b>m_size</b>
<b>m_data</b>


101
101
5
5


<b>Dùng chung </b>


<b>bộ nhớ!!</b>



<b>Dùng chung </b>



</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

Ba vấn đề con trỏ



Ba vấn đề con 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);


<b>Array(const Array &a);</b>
<b>Array(const Array &a);</b>
~Array();
~Array();
};
};
void main()
void main()
{
{


Array a1(5);


Array a1(5);


Array a2(a1);


Array a2(a1);







<b>Array::Array(const Array &a)</b>
<b>Array::Array(const Array &a)</b>
<b>{</b>


<b>{</b>


<b>m_size = a.m_size;</b>
<b>m_size = a.m_size;</b>


<b>m_data = new int[m_size];</b>
<b>m_data = new int[m_size];</b>
<b>for (int i = 0; i < m_size; i++)</b>
<b>for (int i = 0; i < m_size; i++)</b>


<b>m_data[ i ] = a.m_data[ i ];</b>


<b>m_data[ i ] = a.m_data[ i ];</b>


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

Ba vấn đề con trỏ



Ba vấn đề con 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;






}


</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

Ba vấn đề con trỏ



Ba vấn đề con trỏ



Vấn đề sao chép bộ nhớ (ttg mặc định):

Vấn đề sao chép bộ nhớ (ttg mặc định):



Toán tử gán mặc định sao chép giá trị từng thuộc

Toán tử gán mặc định sao chép giá trị từng thuộc


tính.



tính.


<b>a1: Array</b>


<b>m_size</b>
<b>m_data</b>

<b>a1: Array</b>


<b>m_size</b>
<b>m_data</b>


<b>Phải cài đặt lại toán tử gán!!</b>



<b>Phải cài đặt lại toán tử gán!!</b>


1


1 22 33 44 55
101
101
5
5

<b>a2: Array</b>


<b>m_size</b>
<b>m_data</b>

<b>a2: Array</b>


<b>m_size</b>
<b>m_data</b>
405
405
6
6
1



1 22 33 44 55 66
101


101
5
5


<b>Rò rỉ bộ nhớ!!</b>



<b>Rò rỉ bộ nhớ!!</b>



<b>Dùng chung </b>


<b>bộ nhớ!!</b>



<b>Dùng chung </b>



</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

Ba vấn đề con trỏ



Ba vấn đề con 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();


<b>Array & operator =(const Array &a);</b>
<b>Array & operator =(const Array &a);</b>
};
};
void main()
void main()
{
{


Array a1(5);
Array a1(5);


Array a2(6);
Array a2(6);




<b>Array & Array::operator =(const Array &a)</b>
<b>Array & Array::operator =(const Array &a)</b>
<b>{</b>


<b>{</b>


<b>delete m_data;</b>
<b>delete m_data;</b>


<b>m_size = a.m_size;</b>
<b>m_size = a.m_size;</b>


<b>m_data = new int[m_size];</b>
<b>m_data = new int[m_size];</b>
<b>for (int i = 0; i < m_size; i++)</b>
<b>for (int i = 0; i < m_size; i++)</b>
<b>m_data[ i ] = a.m_data[ i ];</b>


<b>m_data[ i ] = a.m_data[ i ];</b>


<b>return *this;</b>


<b>return *this;</b>
<b>}</b>



</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

Ba vấn đề con trỏ



Ba vấn đề con trỏ



Dr. Guru khuyên:

Dr. Guru khuyên:

<b>luật “ba ông lớn”</b>

<b>luật “ba ơng lớn”</b>



Lớp có thuộc tính con trỏ, phải ln kèm theo:

Lớp có thuộc tính con trỏ, phải ln kèm theo:



 Hàm hủy: thu hồi bộ nhớ.Hàm hủy: thu hồi bộ nhớ.


 Hàm dựng sao chép: sao chép bộ nhớ.Hàm dựng sao chép: sao chép bộ nhớ.
 Toán tử gán: sao chép bộ nhớ.Toán tử gán: sao chép bộ nhớ.


class HocSinh


class HocSinh


{


{


private:


private:


char


char *m_hoTen;*m_hoTen;
public:



public:


<b>HocSinh(const HocSinh &h);</b>
<b>HocSinh(const HocSinh &h);</b>
<b>~HocSinh();</b>


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=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 và phương thức thuộc phạm vi lớp.

Thuộc tính và 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 của lớp.

Các đối tượng dùng chung thành phần tĩnh của lớp.


Phương thức tĩnh chỉ truy xuất được thành phần tĩnh.

Phương thức tĩnh chỉ truy xuất được thành phần tĩnh.



Ba vấn đề con trỏ:

Ba vấn đề con trỏ:



Khi lớp có thuộc tính con trỏ:

Khi lớp có thuộc tính con trỏ:



 Phải có hàm hủy.Phải có hàm hủy.


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

Nội dung



Nội dung



</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=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 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 <b>TimeTime</b>..


<i>(Gợi ý)</i>
<i>(Gợi ý)</i>


 Khai báo thuộc tính tĩnh lưu số đối tượng được tạo ra.Khai báo thuộc tính tĩnh lưu số đối tượng được tạo ra.
 Tăng giá trị thuộc tính này khi khởi tạo đối tượng.Tăng giá trị thuộc tính này khi khởi tạo đối tượng.


 Giảm giá trị thuộc tính này khi hủy đối tượng.Giảm giá trị thuộc tính này khi hủy đối tượng.


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=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 <b>DateDate</b> 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.


<i>(Gợi ý)</i>
<i>(Gợi ý)</i>



</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=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 <b>đa thứcđa thức</b> có những phương thức sau: có những phương thức sau:


<i>(Nhóm tạo hủy)</i>
<i>(Nhóm tạo hủy)</i>


 Khởi tạo mặc định đa thức = 0.Khởi tạo mặc định đa thức = 0.


 Khởi tạo với bậc và mảng hệ số cho trước.Khởi tạo với bậc và mảng hệ số cho trước.
 Khởi tạo từ một đối tượng đa thức khác.Khởi tạo từ một đối tượng đa thức khác.
 Hủy đa thức, thu hồi bộ nhớ.Hủy đa thức, thu hồi bộ nhớ.


<i>(Nhóm truy xuất thơng tin)</i>
<i>(Nhóm truy xuất thơng tin)</i>


 Lấy bậc đa thức.Lấy bậc đa thức.


</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=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 <b>đa thứcđa thức</b> (tiếp theo): (tiếp theo):


<i>(Nhóm xử lý nghiệp vụ)</i>
<i>(Nhóm xử lý nghiệp vụ)</i>


 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, ngun hàm.
<i>(Nhóm tốn tử)</i>


<i>(Nhóm tốn tử)</i>


 Tốn tử số học: +, -, *, /, =.Toán tử số học: +, -, *, /, =.


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=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 <b>chuỗichuỗi</b> có những phương thức sau: có những phương thức sau:


<i>(Nhóm tạo hủy)</i>
<i>(Nhóm tạo hủy)</i>


 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ừ một đối tượng chuỗi khác.Khởi tạo từ một đối tượng chuỗi khác.
 Hủy chuỗi, thu hồi bộ nhớ.Hủy chuỗi, thu hồi bộ nhớ.


<i>(Nhóm truy xuất thơng tin)</i>
<i>(Nhóm truy xuất thơng tin)</i>


</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=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 <b>chuỗichuỗi</b> (tiếp theo): (tiếp theo):


<i>(Nhóm xử lý nghiệp vụ)</i>
<i>(Nhóm xử lý nghiệp vụ)</i>


 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 con.


 Trích chuỗi con.Trích chuỗi con.
<i>(Nhóm tốn tử)</i>


<i>(Nhóm tốn tử)</i>


 Tố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: [ ].


</div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×