25/05/2018, 12:01

Con trỏ đối tượng

dùng để chứa địa chỉ của biến, mảng đối tượng. Nó được khai báo như sau: Tên_lớp *con trỏ ; Vùng lớp DIEM có thể khai báo: DIEM *p1 , *p2, *p3 ; // khai báo 3 con trỏ p1, p2, p3 DIEM ...

dùng để chứa địa chỉ của biến, mảng đối tượng. Nó được khai báo như sau:

Tên_lớp *con trỏ ;
    

Vùng lớp DIEM có thể khai báo:

DIEM *p1 , *p2, *p3 ; // khai báo 3 con trỏ p1, p2, p3

DIEM d1, d2 ; // Khai báo 2 đối tượng d1, d2

DIEM d[20] ; // Khai báo mảng đối tượng

và có thể thực hiện các câu lệnh:

p1 = &d2 ; // p1 chứa địa chỉ của d2 , hay p1 trỏ tới d2

p2 = d ; // p2 trỏ tới đầu mảng d

p3 = new DIEM // Tạo một đối tượng và chứa địa chỉ của nó 

// vào p3

Để sử dụng thuộc tính của đối tượng thông qua con trỏ, ta viết như sau:

Tên_con_trỏ->Tên_thuộc_tính
Nếu con trỏ chứa địa chỉ đầu của mảng, có thể dùng con trỏ như tên mảng. Như vậy sau khi thực hiện các câu lệnh trên thì:

p1->x và d2.x là như nhau

p2[i].y và d[i].y là như nhau

Tóm lại ta có quy tắc sau

Quy tắc sử dụng thuộc tính: Để sử dụng một thuộc tính của đối tượng ta phải dùng phép . hoặc phép -> . Trong chương trình, không cho phép viết tên thuộc tính một cách đơn độc mà phải đi kèm tên đối tượng hoặc tên con trỏ theo các mẫu sau:

Tên_đối_tượng.Tên_thuộc_tính
    Tên_con_trỏ->Tên_thuộc_tính
    Tên_mảng_đối_tượng[chỉ_số].Tên_thuộc_tính
    Tên_con_trỏ[chỉ_số].Tên_thuộc_tính
    

Chương trình dưới đây cũng sử dụng lớp DIEM (trong §1) để nhập một dẫy điểm, hiển thị và ẩn các điểm vừa nhập. Chương trình dùng một con trỏ kiểu DIEM và dùng toán tử new để tạo ra một dẫy đối tượng.

#include <conio.h>
    #include <iostream.h>
    #include <graphics.h>
    class DIEM
    {
    private:
    int x, y, m ;
    public:
    void nhapsl();
    void an()
    {
    putpixel(x,y,getbkcolor());
    }
    void hien();
    };
    void DIEM::nhapsl()
    {
    cout <<"
Nhap hoanh do (cot) va tung do (hang) cua diem:" ;
    cin >> x >> y ;
    cout << " 
Nhap ma mau cua diem: " ;
    cin >> m ;
    }
    void DIEM::hien()
    {
    int mau_ht;
    mau_ht = getcolor() ;
    putpixel(x,y,m);
    setcolor(mau_ht);
    }
    void kd_do_hoa()
    {
    int mh, mode ;
    mh=mode=0;
    initgraph(&mh, &mode, "");
    }
    void main()
    {
    DIEM *p;
    int i, n;
    cout << "So diem: " ;
    cin >> n;
    p = new DIEM[n+1];
    for (i=1; i<=n; ++i)
    p[i].nhapsl();
    kd_do_hoa();
    for (i=1; i<=n; ++i)
    p[i].hien();
    getch();
    for (i=1; i<=n; ++i)
    p[i].an();
    getch();
    closegraph();
    }
    
0