con tro va mang doi tuong
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
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
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
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
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
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