1. Trang chủ
  2. » Giáo Dục - Đào Tạo

bai thuc hanh c phan 3

31 7 0

Đ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

 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.  Các quy tắc truy nhập khác vấn được áp dụng.[r]

(1)(2)

Nội dung chính

 Lớp thành phần lớp  Cài đặt thành phần lớp  Các thành phần tĩnh lớp

 Lớp lồng  Đối tượng

(3)

1 Lớp thành phần lớp

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

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

(user-defined types) sử dụng tương tự kiểu liệu có sẵn (built-in data types)

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

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

(4)

Định nghĩa lớp …

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

và hàm (member function).

(5)

Khai báo lớp

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

{

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

unsigned int EmpID ; // member data

char EmpName[30]; float EmpSalary;

public: // từ khóa cho biết truy nhập từ lớp

void AddEmployee(); // member function

(6)

Điều khiển truy nhập Class private: public: data1 data2 functiond() functiona() functionb() functionc()

Phần khai báo với từ khóa private truy nhập hàm thành phần class

(7)

Ẩn liệu

 Ẩn liệu kỹ thuật bảo vệ liệu

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

 Đặt liệu vào lớp với từ khóa private  Dữ liệu private truy nhập bên

trong lớp

 Dữ liệu hàm public truy

(8)

2 Cài đặt thành phần lớp

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

 Nên khai báo với từ khố private

 Khơng khởi tạo giá trị liệu thành

(9)

Cài đặt thành phần lớp

 Hàm thành phần

void Product :: Display (void) {

cout << ProductName; }

(10)

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

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

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

đối với tất đối tượng lớp

 Sự tồn liệu thành phần tĩnh

không phụ thuộc vào tồn đối tượng thuộc lớp

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

(11)(12)

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

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

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

phần tĩnh

(13)(14)

4 Lớp lồng

 Là lớp khai báo định nghĩa

trong lớp khác.

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

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

 Các thành phần lớp lồng khai

(15)(16)

5 Đối tượng

 Đối tượng thể cụ thể

một lớp

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

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

(17)(18)

Đối tượng lớp lồng

 Nếu lớp lồng khai báo với từ khố private đối tượng lớp lồng tạo thân lớp

(19)

6 Hàm tạo (Constructor)

 Hàm tạo hàm thành phần tự

động viện dẫn khởi tạo đối tượng lớp

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

khơng có giá trị trả

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

mặc định tự động tạo

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

(20)(21)

Chồng hàm tạo

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

(22)

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

class Date {

public:

// hàm tạo với 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

(23)

Hàm tạo chép

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

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

 Ta định nghĩa lại hàm tạo chép

Date(Date& d)

 Ví dụ

void main() {

Date d1(12,4,1997);

(24)

Hàm hủy (Destructor)

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

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

class Date {

public:

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

if {

Date d1;

(25)

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

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

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

class Date {

int diff(Date d); // Tính khoảng thời gian 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);

(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;

(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 d1.day

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

của

Hàm thành phần d2 truy nhập tới liệu day

(28)

Hàm trả đố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);

(29)

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

 Hàm thành phần khai báo với từ khóa const khơng thể thay đổi liệu đố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) {

(30)

Hàm thành phần

 Const member function đối tượng const non-const viện dẫn, non-non-const member function đố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

(31)

Tự tham chiếu (Self-Reference)

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

tới đối tượng cách rõ ràng thơng qua 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;

Ngày đăng: 29/04/2021, 00:17

Xem thêm:

w