Con trỏ xác định đối tợng

Một phần của tài liệu Lập trình hướng đối tượng (Trang 127 - 132)

Trong C++, việc sử dụng con trỏ để trỏ vào đối tợng của lớp rất hay sử dụng vì các lý do sau đây

- Cho phép cấp phát bộ nhớ động cho 1 mảng đối t- ợng.

- Cho phép sử dụng con trỏ this để trỏ vào đối tợng. - Cho phép sử dụng con trỏ có kiểu của lớp trong quan hệ kế thừa (xem bài 3).

3.1. Cho phép cấp phát bộ nhớ động cho 1 mảng đối t- ợng

#include <iostream.h> #include <conio.h> #include <stdio.h> class MAT_HANG { int code; float price; public:

void getdata(int c,float p) {code=c; price=p;}

void show(void) { cout<<"ma hang: "<<code<<endl; cout<<"don gia: "<<price<<endl; } };

const int k=2; int main() { clrscr();

MAT_HANG *p = new MAT_HANG[k]; MAT_HANG *d = p;

int i,x; float y;

for(i=0;i<k;i++)

{ cout<<"nhap ma va don gia mat hang thu " <<i+1<<": "; cin>>x>>y; p->getdata(x,y); p++; } for(i=0;i<k;i++) {d->show(); d++; } getche(); return 0; } 3.2. Con trỏ this

* C++ sử dụng con trỏ this là con trỏ đặc biệt để biểu diễn cho đối tợng có liên quan đến hàm thành phần đang thực hiện.

Ví dụ xét constructor (hoặc 1 hàm thành phần bất kỳ) của lớp A class A { int x; A(int x1) { x=x1;} ... };

thực chất lệnh trên sử dụng con trỏ this xác định cho 1 đối tợng ẩn để trỏ vào thành phần dữ liệu x:

A(int x1) {this->x=x1;}

* Trong toán tử tải bội (không thân thiện) thì nếu số ngôi của toán tử gốc là 2 thì số ngôi của toán tử tải bội sẽ là 1.

Ví dụ class A { int x,y; public:

A operator +(A a) { A b ; b.x=x+a.x; b.y=y+a.y; return b;}

};

Thực chất, toán tử tải bội + nói trênvẫn đủ 2 ngôi. Ngôi thứ nhất là đối tợng ẩn xác định bằng con trỏ this, ngôi thứ 2 là đối a của toán tử.

A operator +(A a) { A b; b.x=this->x+a.x; b.y=this->y+a.y; return b;} Ví dụ 4 #include <iostream.h> #include <conio.h> #include <stdio.h> class A { int x,y; public: A() {x=y=0;}

A(int x1,int y1) {this->x=x1; this->y=y1;} A operator +(A a)

{A b; b.x=this->x+a.x; b.y=this->y+a.y; return b;} void show() {cout<<this->x<<","<<this->y<<endl;} }; int main() { clrscr(); A a(3,4),b(5,6); a=a+b; a.show(); getche(); return 0; }

Một ứng dụng quan trọng của con trỏ this là nó trả lại đối tợng mà nó trỏ tới bằng lệnh return *this trong tr- ờng hợp mà khai báo tên đối tợng là không thuận lợi.

Ví dụ 5 #include <iostream.h> #include <conio.h> #include <string.h> class CANBO { char *ten; int tuoi; public: CANBO(char*,int); CANBO& gia_hon(CANBO&); void xem(void); }; CANBO::CANBO(char *s,int a) { int k=strlen(s);

ten = new char[k+1]; strcpy(ten,s); tuoi=a;} CANBO& CANBO::gia_hon(CANBO &x) { if (x.tuoi>=tuoi) return x;

else return *this; }

{ cout<<"ten:"<<ten<<endl; cout<<"tuoi:"<<tuoi<<endl; }

int main() { clrscr();

CANBO a("TUNG QUAN",32), b("CHI DUNG",25),

c("THANH THAO",38); CANBO p("",0);

p=a.gia_hon(b);

cout<<"nguoi lon tuoi hon la: "; p.xem();

p=p.gia_hon(c);

cout<<"nguoi lon tuoi nhat la: "; p.xem();

getche(); return 0; }

Bài 3. Hàm ảo và tơng ứng bội trong kế thừa

Một phần của tài liệu Lập trình hướng đối tượng (Trang 127 - 132)

Tải bản đầy đủ (DOC)

(174 trang)
w