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

Thông tin cơ bản

Định dạng
Số trang 31
Dung lượng 301,5 KB

Nội dung

 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

w