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

bai thuc hanh c phan 3

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 (142.69 KB, 31 trang )

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

Nội dung chính



Lớp và các thành phần của lớp


Cài đặt các thành phần của lớp


Các thành phần tĩnh của lớp



Lớp lồng


Đối tượng



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

1. Lớp và các thành phần của lớp



 Lớp trong C++ cho phép người lập trình tự


định nghĩa các kiểu dữ liệu phức tạp


(user-defined types) và được sử dụng tương tự như
kiểu dữ liệu có sẵn (built-in data types).


 Lớp thường được sử dụng để định nghĩa các


vấn đề trừu tượng như: số phức, ngày tháng,
vector …


 Lớp cho phép tách rời phần cài đặt


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

Định nghĩa lớp …



Một lớp có chứa dữ liệu (member data)



và hàm (member function).




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

Khai báo lớp



<b>class</b> Employee // khai báo tên lớp


{


<b>private</b>: // từ khóa cho biết khơng thể truy nhập từ ngồi lớp


<b>unsigned int</b> EmpID ; // member data


<b>char </b>EmpName[30];
<b>float </b>EmpSalary;


<b>public</b>: // từ khóa cho biết có thể truy nhập từ ngồi lớp


<b>void</b> AddEmployee(); // member function


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

Điều khiển truy nhập


Class
private:
public:
data1
data2
functiond()
functiona()
functionb()
functionc()


Phần được khai báo với từ khóa
private chỉ được truy nhập bởi các


hàm thành phần của cùng class


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

Ẩn dữ liệu



Ẩn dữ liệu là kỹ thuật bảo vệ dữ liệu



khỏi những truy nhập không hợp lệ.



 Đặt dữ liệu vào lớp với từ khóa private
 Dữ liệu private chỉ được truy nhập bên


trong lớp


 Dữ liệu hoặc hàm public có thể được truy


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

2. Cài đặt các thành phần của lớp



 Dữ liệu thành phần


 Nên được khai báo với từ khố private.


 Khơng được khởi tạo giá trị của dữ liệu thành


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

Cài đặt các thành phần của lớp



 Hàm thành phần


<b>void Product :: Display (void)</b>
<b>{</b>



<b>cout << ProductName;</b>
<b>}</b>


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

3. Các thành phần tĩnh của


lớp



Dữ liệu thành phần tĩnh



 Là thành phần dữ liệu có giá trị như nhau


đối với tất cả các đối tượng của lớp.


 Sự tồn tại của dữ liệu thành phần tĩnh


không phụ thuộc vào sự tồn tại của đối
tượng thuộc lớp.


 Sau khi khai báo thành phần dữ liệu tĩnh ở


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

Các thành phần tĩnh của lớp



Hàm thành phần tĩnh



 Dùng để truy nhập tới các dữ liệu thành


phần tĩnh.


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

4. Lớp lồng



Là lớp được khai báo hoặc định nghĩa




trong một lớp khác.



Đối tượng của lớp bên ngồi có chứa



tham chiếu tới đối tượng của lớp lồng.



Các thành phần của lớp lồng được khai



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

5. Đối tượng



Đối tượng là một thể hiện cụ thể của



một lớp



Sử dụng toán tử “.” để truy nhập vào



các thành phần của đối tượng



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

Đối tượng của lớp lồng



 Nếu lớp lồng được khai báo
với từ khoá private thì đối
tượng của lớp lồng chỉ được
tạo ra trong thân của lớp
ngoài.


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

6. Hàm tạo

(Constructor)



 Hàm tạo là một hàm thành phần được tự



động viện dẫn khi khởi tạo một đối tượng mới
của lớp.


 Hàm tạo phải có tên trùng với tên lớp và


khơng có giá trị trả về.


 Nếu khơng khai báo hàm tạo thì một hàm tạo


mặc định sẽ tự động được tạo ra.


 Nếu đã khai báo hàm tạo thì khơng tự động


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

Chồng hàm tạo



 Một lớp có thể có nhiều hàm tạo với các tham số


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

Hàm tạo với giá trị mặc định



class Date
{


public:


// hàm tạo với các giá trị mặc định cuủa day, month, year.


Date(int d=1, int m=1, int y=1900);
};



Date::Date(int d, int m, int y) : day(d), month(m),
year(y) {}


void main()
{


Date d1; // 1.1.1900


Date d2(5); // 5.1.1900
Date d3(15,8); // 15.8.1900


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

Hàm tạo sao chép



 Hàm tạo sao chép khởi tạo đối tượng dựa trên một đối tượng
khác thuộc cùng lớp.


 Mỗi lớp có một hàm tạo sao chép mặc định – có một tham số là
đối tượng của cùng một lớp.


 Ta có thể định nghĩa lại hàm tạo sao chép.


Date(Date& d)


 Ví dụ


void main()
{


Date d1(12,4,1997);



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

Hàm hủy (Destructor)



 Hàm hủy tự động được gọi khi đối tượng bị hủy


 Hàm hủy thường được sử dụng để giải phóng bộ nhớ
 Ví dụ:


class Date
{


public:


Date(); // hàm tạo
~Date(); // hàm hủy
};


if
{


Date d1;


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

7. Sử dụng đối tượng



 Đối tượng làm tham số để truyền cho các hàm tương


tự như các kiểu xây dựng sẵn khác.


class Date
{



int diff(Date d); // Tính khoảng thời gian giữa hai ngày
};


int Date::diff(Date d)
{


int n=day-d.day;


n+= 30 * (month – d.month);
n+= 365* (year – d.year);
return n;


}


Date d1(14,5,2000);
Date d2(10,4,2000);


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

Ví dụ: Đối tượng làm tham số



class Date
{


void add_days (Date d, int n); // cộng thêm n ngày
};


void Date::add_days(Date d, int n)
{


day=d.day + n % 30;



month = d.month + (n % 365) / 30;
year = d.year + n / 365;


}


Date d1(14,5,2000);
Date d2;


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

Ví dụ: Đối tượng làm tham số


object d2
day
month
year
object d1
day
month
year
d2.add_days(d1,65);
day <sub>d1.day</sub>


Hàm thành phần của d2 truy
nhập trực tiếp tới dữ liệu day


của nó


Hàm thành phần của d2 truy
nhập tới dữ liệu day của


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

Hàm trả về đối tượng




class Date
{


Date get_date (int n);
};


Date Date::get_date(int n)
{


Date temp;


temp.day=day + n % 30;


temp.month = month + (n % 365) / 30;
temp.year = year + n / 365;


return temp;
}


Date d1(14,5,2000);


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

Hàm thành phần hằng



 Hàm thành phần được khai báo với từ khóa const thì sẽ khơng
thể thay đổi dữ liệu của đối tượng.


class Date
{


int year() const; // const



void add_year(int n); // non-const
};


int Date::year() const
{


return year;
}


int Date::add_year(int n)
{


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

Hàm thành phần hằng ...



 Const member function có thể được cả đối tượng const và
non-const viện dẫn, nhưng non-non-const member function thì chỉ được
các đối tượng non-const viện dẫn.


void f(Date& d, const Date& cd)
{


int i=d.year(); // ok
d.add_year(2); // ok
int j=cd.year(); // ok


cd.add_year(3); // error


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

Tự tham chiếu (

Self-Reference

)




 Mỗi hàm thành phần biết đối tượng nào viện dẫn nó và có thể truy cập


tới đối tượng đó một cách rõ ràng thơng qua con trỏ this.


class Date
{


Date get_date (int n);
};


Date Date::get_date(int n)
{


Date temp;


temp.day=this.day + n % 30;


temp.month = this.month + (n % 365) / 30;
temp.year = this.year + n / 365;


</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
×