con tro va mang doi tuong

23
Nội dung Con trỏ đối tượng Mảng đối tượng Dữ liệu thành viên tĩnh Hàm thành viên tĩnh Lớp Gộp/Cấu thành 1

Upload: nguyen-lam

Post on 09-Aug-2015

33 views

Category:

Education


0 download

TRANSCRIPT

Nội dung

Con trỏ đối tượng Mảng đối tượng Dữ liệu thành viên tĩnh Hàm thành viên tĩnh Lớp Gộp/Cấu thành

1

Con trỏ đối tượng

2

Con trỏ đối tượng

Là con trỏ trỏ đến địa chỉ của đối tượng có kiểu Lớp.

Thao tác với con trỏ đối tượng: Khai báo con trỏ đối tượng Cấp phát bộ nhớ cho đối tượng Sử dụng con trỏ đối tượng Giải phóng bộ nhớ cho con trỏ đối tượng

3

Con trỏ đối tượng – ví dụ

int main(){Diem *d1;Diem *d2;d1=new Diem();d2=new Diem(10,20);d1->show();d2->show();delete d1;delete d2;

}

Giải phóng bộ nhớ cho con trỏ đối tượng

Khai báo con trỏ đối tượng

Cấp phát bộ nhớ cho đối tượng

Sử dụng con trỏ đối tượng

4

Mảng đối tượng

5

Mảng đối tượng

Mảng chứa các phần tử là các đối tượng Tương tự như mảng có kiểu dữ liệu thông

dụng (int, char, …) Khai báo mảng đối tượng:

Mảng tĩnh Mảng động

6

Mảng đối tượng -Mảng tĩnh

int main(){

Diem d[5];for(int i=0;i<5;i++){

d[i].show();}

}

Khai báo mảng chứa 5 đối tượng

Gọi phương thức tương ứng của từng đối tượng

Bắt buộc phải có hàm khởi tạo mặc định. Bắt buộc phải có hàm khởi tạo mặc định.

7

Mảng đối tượng – mảng động

Mảng được khai báo và cấp phát động thông qua con trỏ

Sử dụng đối tượng Giải phóng bộ nhớ cho con trỏ

8

Mảng đối tượng – mảng động

int main(){

Diem *d;d=new Diem[5];for(int i=0;i<5;i++){

d[i].show();}delete []d;

}

Khai báo con trỏ trỏ đến Diem

Cấp phát bộ nhớ cho con trỏ

Gọi phương thức tương ứng của từng đối tượng

Giải phóng vùng nhớ

9

Dữ liệu thành viên tĩnh

10

Dữ liệu thành viên tĩnh

Nếu một dữ liệu thành viên của lớp được khai báo là Tĩnh: Chỉ có 1 mục dữ liệu được tạo ra cho lớp Tất cả các đối tượng thuộc lớp chia sẽ mục dữ

liệu này Tồn tại trong phạm vi toàn lớp Khai báo:

static <kiểu> <tên dữ liệu thành viên>

11

Dữ liệu thành viên tĩnh – Ví dụclass Diem{private:

int x;int y;static int count;

public:~Diem(){

cout<<"Huy diem."<<endl;count--;

}Diem(){

x=0; y=0;count++;cout<<"Khoi tao diem (mac dinh)"<<endl;

}Diem(int x,int y){ this->x=x;this->y=y;

count++;cout<<"Khoi tao diem (co tham so)"<<endl;

}Diem (const Diem &d){ this->x=d.x; this->y=d.y;

count++;cout<<"Khoi tao diem (sao chep)"<<endl;

}};

Dữ liệu thành viên tĩnh

Sử dụng dữ liệu thành viên tĩnh

12

Hàm thành viên tĩnh

13

Hàm thành viên tĩnh

Chỉ có thể truy cập dữ liệu thành viên tĩnhdữ liệu thành viên tĩnh Được xem như toàn cục đối với các thành

viên của lớp

static void showCount(){cout<<"So doi tuong

Diem:"<<count<<endl;}

14

Dữ liệu thành viên tĩnh, Hàm thành viên tĩnh – Ví dụ

int Diem::count;//khoi tao countint main(){

Diem d1,d2;d1.showCount();d2.showCount();

}

Khởi tạo Dữ liệu thành viên tĩnh trước hàm Main

Gọi hàm thành viên tĩnh

15

Lớp Gộp/ Cấu thành

16

Sử dụng lớp đã có

Hai cách để sử dụng lớp đã tạo: Lớp gộp (cấu thành) Thừa kế

17

Lớp gộp

Tạo lớp mới dựa trên lớp đã có Lớp mới có thành viên dữ liệu có kiểu thuộc

lớp đã tạo

18

Ví dụ

Giả sử ta có lớp Diem và lớp DoanThang được mô tả như sau

DIEM

- x: int- Y: int

+ Diem()+ Diem(x:int, y:int)+ getX: int+ getY: int+ setX(x:int): void+ setY(y:int): void+ show(): void

DOANTHANG

- dau: Diem- cuoi: Diem- mau: string

+ DoanThang()+ DoanThang(xd:int, yd:int, xc:int, yc:int, mau:string)+ DoanThang(dau:Diem, cuoi:Diem,mau:string)+ getDau(): Diem+ getCuoi(): Diem+ setDau(dau:Diem): void+ setCuoi(cuoi:Diem): void+ show(): void

2 1

19

Cài đặtclass Diem{private:

int x;int y;string mau;

public:Diem(){

x=0;y=0;

}Diem(int x,int y){

this->x=x;this->y=y;

}int getX(){

return x;}int getY(){

return y;}void setX(int x){

this->x=x;}void setY(int y){

this->y=y;}void show(){

cout<<"("<<x<<","<<y<<")"<<endl;}

};

class DoanThang{private:

Diem dau;Diem cuoi;string mau;

public:DoanThang():dau(), cuoi(){

mau="";cout<<"Khoi tao Doan thang (mac dinh)"<<endl;

}DoanThang(int xd,int yd,int xc,int yc, string

mau):dau(xd,yd),cuoi(xc,yc){this->mau=mau;cout<<"Khoi tao Doan thang (co tham so)"<<endl;

}

DoanThang(const Diem &d, const Diem &c, string mau):dau(d),cuoi(c){

this->mau=mau;cout<<"Khoi tao Doan thang (co tham so

Diem)"<<endl;}

void show(){cout<<"Diem dau:";dau.show();cout<<"Diem cuoi:";cuoi.show();cout<<"Mau:"<<mau<<endl;

}};

20

Thứ tự gọi hàm khởi tạo và hàm hủy

Gọi hàm khởi tao: Gọi hàm khởi tạo đối tượng thành viên Gọi hàm khởi tạo đối tượng của lớp bao

Gọi hàm hủy: Gọi hàm hủy đối tượng của lớp bao Gọi hàm hủy của đối tượng thành viên

21

Ví dụ

Gọi hàm khởi tao:

int main(){Diem x1(9,10),x2(10,20);x1.show();x2.show();string mau="Xanh";DoanThang d(x1,x2,mau);d.show();DoanThang d1;d1.show();DoanThang d2(1,2,3,4,"Do");d2.show();getch();

return 1;}

22

Ví dụ

Gọi hàm hủy

int main(){{

Diem x1(9,10),x2(10,20);

string mau="Xanh";DoanThang

d(x1,x2,mau);d.show();

}getch();return 1;}

23