1. Trang chủ
  2. » Giáo án - Bài giảng

Giáo án - Bài giảng: ĐỐI TƯỢNG VÀ LỚP TRONG C++

56 3K 6

Đ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

Tiêu đề Đối Tượng Và Lớp Trong C++
Trường học Trường Đại Học Công Nghệ Thông Tin - Đại Học Quốc Gia Hà Nội
Chuyên ngành Lập trình C++
Thể loại Bài giảng
Thành phố Hà Nội
Định dạng
Số trang 56
Dung lượng 1,58 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Khái niệm về đóng gói dữ liệu  Khai báo và sử dụng một lớp  Khai báo và sử dụng đối tượng, con trỏ đối tượng, tham chiếu đối tượng  Hàm thiết lập và hàm huỷ bỏ  Khai báo và sử dụng

Trang 1

 Khái niệm về đóng gói dữ liệu

 Khai báo và sử dụng một lớp

 Khai báo và sử dụng đối tượng, con trỏ đối tượng, tham chiếu đối tượng

 Hàm thiết lập và hàm huỷ bỏ

 Khai báo và sử dụng hàm thiết lập sao chép

 Vai trò của hàm thiết lập ngầm định

Trang 2

Ví dụ mô tả một đối tượng điểm

{

//dữ liệu

int x,y;

//phuong thuc

void init(int ox,int oy);

void move(int dx,int dy);

Trang 3

- Lời gọi đến một phương thức là truyền một thông báo đến cho đối tượng

Trong C++, khi cài đặt đối tượng cho phép che dấu một bộ phận dữ liệu của đối tượng và mở rộng khả năng truy nhập đến các thành phân riêng của đối

tượng

Trang 4

2 LỚP

Trang 5

void init(int ox, int oy);

void move(int dx, int dy);

x += dx; y += dy;

} void point::display() { cout<<"Ham thanh phan display\n"; cout<<"Toa do: "<<x<<" "<<y<<"\n"; }

Trang 7

2.1 Khai báo lớp

- Có thể định nghĩa trực tiếp các hàm thành phần bên trong khai báo lớp

- Khi định nghĩa hàm thành phần bên ngoài khai báo lớp ta sử dụng cú pháp

<tên kiểu trả về><tên lớp>::<tên hàm>(<danh sách tham số>)

Trang 8

2.1.1 Tạo đối tượng

Tạo đối tượng

<tên lớp> <tên đối tượng>;

2.1.2 Các thành phần dữ liệu

Khai báo các thành phần dữ liệu giống khai báo biến

<tên biến> <tên thành phần>;

Khung DLPhương thức

Đối tượng Đối tượng

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

Trang 9

void init(int ox, int oy){

cout<<"Ham thanh phan init\n";

cout<<"Toa do: "<<x<<" "<<y<<"\n";

}

Trang 11

void init(int ox, int oy);

void move(int dx, int dy);

void display();

};

#endif

Trang 12

//Dinh nghia cac ham thanh phan

void point::init(int ox, int oy) {

cout<<"Ham thanh phan init\n";

x = ox; y = oy; }

void point::move(int dx, int dy) {

cout<<"Ham thanh phan move\n";

x += dx; y += dy;

}

void point::display() { cout<<"Ham thanh phan display\n";

cout<<"Toa do: "<<x<<" "<<y<<"\n";

}void main() { clrscr();

Trang 15

Lưu ý:

- Nếu tất cả các thành phần của lớp là public, lớp sẽ tương đương với struct

- Ngoài public và private, còn có từ khoá protected, trong phạm vì lớp hiện tại một thành phần protected có tính chất giống như thành phần private

Trang 16

void init (int);

void init (int,int);

void display();

void display(char *);

};

void point::init() { x=y=0;

} void point::init(int abs) { x=abs;y=0;

} void point::int(int abs,int ord) { x=abs;

y=ord;

}

Trang 19

2.2 Khả năng của các hàm thành phần

2.2.3 Sử dụng đối tượng làm tham số của hàm thành phần

- Hàm thành phần có quyền truy xuất tới thành phần private của các đối tượng, tham chiếu đối tượng hay con trỏ đối tượng có cùng kiểu lớp khi được dùng là tham số hình thức

{return(x==pt.x && y==pt.y);}

// truyen bang tham chieu

int coincide(point *pt)

{return(x==pt->x && y==pt->y);}

//truyen bang con tro int coincide(point &pt) {return(x==pt.x && y==pt.y);}

} }

Trang 21

Có thể gán 2 đối tượng cùng kiểu

x 5

2 x

y

Trang 22

Khi các đối tượng có chứa thành phần dữ liệu động

5

b a

5 2

Vùng dữ liệu động

z z

x y

x

Trang 23

- Xây dựng lớp nhân viên có các thuộc tính sau: Tên, năm sinh, điạ chỉ,

số điện thoại, email, ngày vào làm việc, hệ số lương, số ngày nghỉ

- Các phương thức đối với nhân viên: tăng hệ số lương, đổi số điện

thoại, xin nghỉ phép.

- Thực hiện quản lý một công ty có 10 nhân viên.

- In ra danh sách tên, năm sinh và địa chỉ các nhân viên trong công ty.

Trang 25

point(int ox,int oy) {x=ox;y=oy;}//ham thiet lap

void move(int dx,int dy) ;

cout<<“Toa do : “<<x<<" "<<y<<"\n"; }

void main() {clrscr();

point a(5,2); //ham thiet lap

Trang 26

4.1 H àm thiết lập

Đặc điểm của hàm thiết lập

- Hàm thiết lập có tên trùng với tên lớp

- Hàm thiết lập phải có thuộc tính public

- Hàm thiết lập không có giá trị trả về, không cần khai báo void

- Có thể có nhiều hàm thiết lập trong cùng một lớp

- Khi tạo đối tượng từ một lớp có nhiều hàm thiết lập thì các tham số truyền phải phù hợp với một trong các hàm thiết lập

Trang 28

point(int ox,int oy) {x=ox;y=oy;}

void move(int dx,int dy) ;

void main() {point a(5,2); //OK

Trang 29

void main() { clrscr();

point a(5,2); //OK a.display();

Trang 31

point(int ox = 1,int oy =0) {x=ox;y=oy;}

void move(int dx,int dy) ;

void main() { clrscr();

Trang 34

- Xây dựng lớp hàng hóa có các thuộc tính sau: Tên hàng, mã hàng,

nhãn hiệu, giá bán, giá mua, số lượng

- Các phương thức đối với hàng hóa: nhập hàng, bán hàng, tăng giá,

giám giá.

- Thực hiện quản lý các mặt hàng: dầu ăn, bia, nước ngọt.

- In ra danh các mặt hàng.

Trang 35

Hàm huỷ bỏ được gọi khi đối tượng bị xoá đi khỏi bộ nhớ

cout<<" Goi ham huy bo voi num =

"<<num<<"\n";

} void main() { clrscr();

void fct(int);

test a(1);

for(int i=1; i<= 2; i++) fct(i);

} void fct(int p) { test x(2*p);

}

Trang 36

Một số qui định đối với hàm huỷ bỏ

- Tên của hàm huỷ bỏ bắt đầu bằng dấu ~ và theo sau là tên lớp

- Hàm huỷ bỏ phải có thuộc tính public

- Hàm thiết lập không có tham số, trong một lớp chỉ có một hàm thiết lập

- Khi không định nghĩa hàm huỷ bỏ, chương trình dịch tự động sinh một hàm huỷ bỏ ngầm định, đối với các lớp không có khai báo các thành phần bộ nhớ động thì có thể dùng hàm huỷ bỏ ngầm định, ngược lại nên có hàm huỷ bỏ tường minh

- Hàm huỷ bỏ không có giá trị trả về

Trang 37

Với biến nguyên

point p(2,3);//Lớp point có hàm thiết lập hai tham số

point q;// Lớp point có hàm thiết lập không tham số

q = p; // phép gán 2 đối tượng

Trang 38

- Nếu không được mô tả tường minh, trong khai báo của một lớp có ít nhất hai hàm thiết lập ngầm định: hàm thiết lập ngầm định và hàm thiết lập sao chép ngầm định

- Với các lớp không có khai báo thành phần dữ liệu động thì chỉ cần dùng các hàm thiết lập ngầm định

Trang 39

4.4 Khai báo và định nghĩa hàm thiết lập sao chép tường minh

- Câu lệnh point q=p; tương đương point q(p);

Dạng khai báo của hàm thiết lập là: point (point &); hoặc point(const point &);

Trang 40

cout<<"Tao doi tuong : "<<this<<endl;

cout<<"Dung ham thiet lap hai tham so\

n";

x=ox;y=oy;

}

point(point &p) {

cout<<"Tao doi tuong : "<<this<<endl;

cout<<"Dung ham thiet lap sao chep\n";

};

void point::display() { cout<<"Toa do : "<<x<<" "<<y<<"\n"; }

point fct(point a) { point b=a;

b.move(2,3);

return b;

}

Trang 42

b.n b.x

b.n b.x

Trang 43

- Các thành phần dữ liệu tĩnh static chỉ có một phiên bản trong tất cả các đối tượng, không thể khởi tạo chúng bằng các hàm thiết lập của một lớp, không thể khởi tạo lúc khai báo

Trang 44

} void main() { clrscr();

void fct();

counter a;

fct();

counter b;

// đối tượng b hủy bỏ trước, đối tượng a hủy

bỏ sau.theo cấu trúc stack }

void fct() { counter u,v;

}

Trang 45

- Hàm thành phần tĩnh static không có tham số ngầm định

- Hàm thành phần tĩnh của một lớp có thể gọi cho dù chưa có khai báo các đối tượng của lớp đó

- Thông thường các hàm thành phần tĩnh static được dùng để xử lý chung trên tất cả các đối tượng của lớp

Trang 46

} void main() { clrscr();

counter::counter_display();//goi qua lop counter v;

v.counter_display();//goi qua lop }

Trang 47

- C++ cho phép bên ngoài truy cập tới thành phần private của lớp dựa trên khái niệm “hàm bạn”

Trang 48

int coincide (point p, point q) {

if ((p.x == q.x) && (p.y == q.y)) return 1;

else return 0;

}

void main() { point a(1,0),b(1),c;

if (coincide (a,b)) cout <<"a trung voi b\n"; else cout<<"a va b khac nhau\n";

if (coincide(a,c)) cout<<"a trung voi c\n"; else cout<<"a va c khac nhau\n";

}

Trang 49

7.2 Hàm thành phần của một lớp là bạn của lớp khác

A, B là hai lớp

int f(char, A); là một hàm trong lớp B

Nếu f có nhu cầu truy xuất vào các thành phần riêng của A thì f cần được khai báo là bạn của A trong lớp A như sau

friend int B::f(char, A);

Trang 52

7.3 Tất cả các hàm của lớp là bạn của lớp khác

Tất cả các hàm của lớp B là bạn của lớp A, ta đặt trong A khai báo sau friend class B;

Trang 53

7.4 Ví dụ bài toán nhân ma trận với vector- dùng hàm bạn tự do

public:

matrix(double t[3][3]) { int i; int j;

for(i=0; i<3; i++) for(j=0; j<3; j++) mat[i][j] = t[i][j];

} friend vect prod (matrix, vect);

};

Trang 54

7.4 Ví dụ bài toán nhân ma trận với vector- dùng hàm bạn tự do

vect prod (matrix m, vect x) {

vect res;

double tb[3][3] = {1,2,3,4,,5,6,7,8,9}; matrix a(tb);

res=prod(a,w); res.display();

}

Trang 55

7.4 Ví dụ bài toán nhân ma trận với vector- dùng hàm thành phần là bạn của một lớp

void display () { int i;

for (int i=0; i<3; i++) cout<<v[i]<<" ";

cout<<endl;

} };

Trang 56

7.4 Ví dụ bài toán nhân ma trận với vector- dùng hàm thành phần là bạn của một lớp

vect matrix::prod (vect x) {

Ngày đăng: 16/04/2014, 15:07

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w