Mảng con trỏ và tham chiếu - Pdf 41

Chương 3

Mảng , Con trỏ và Tham chiếu •
Mảng các đối tượng


Con trỏ đối tượng


Con trỏ this


Toán tử new và delete


Tham chiếu (reference)


Truyền tham chiếu cho đối tượng


samp ob[4]
; // khai báo mảng đối tượng
int i;

for(i=0; i<4; i++)
ob[i].
set_a(i); // truy cập mảng đối tượng
for(i=0; i<4; i++) cout << ob[i].get_a( );
return 0;
} •
Nếu kiểu lớp
có hàm tạo, thì mảng đối tượng có thể được khởi đầu
.

Ví dụ 1.2
// Initialize an array.
#include <iostream.h>
class samp {
int a;
public:

samp(int n) { a = n; }
Chương 3
Mảng, Con trỏ, Tham chiếu


class samp {
int a;
public:
samp(int n) { a = n; }
int get_a() { return a; }
};

int main()
{
samp
ob[4][2] = { 1, 2,
3, 4,
5, 6,
7, 8 };

int i;
Chương 3
Mảng, Con trỏ, Tham chiếu
71
71
for(i=0; i<4; i++) {
cout <<
ob[i][0].
get_a() << ' ';
cout <<
ob[i][1].

samp(13, 14), samp(15, 16) }
;
int i;

for(i=0; i<4; i++) {
cout <<
ob[i][0].
get_a() << ' ';
cout <<
ob[i][0].
get_b() << "\n";
cout <<
ob[i][1].
get_a() << ' ';
cout <<
ob[i][1].
get_b() << "\n";
}
return 0;
}
Chương 3
Mảng, Con trỏ, Tham chiếu
72
72

Bài tập I



Để có
điạ chỉ của một đối tượng
, dùng toán tử & đặt trước đối tượng. Ví dụ
p = &ob; Chương 3
Mảng, Con trỏ, Tham chiếu
73
73
Ví dụ 2.1
#include <iostream.h>

class myclass {
int a;
public:
myclass(int x); // constructor
int get();
};

myclass::myclass(int x)
{
a = x;
}

int myclass::get()

Chương 3
Mảng, Con trỏ, Tham chiếu
74
74

Số học con trỏ :
+ Khi tăng
con trỏ đối tượng
, nó sẽ trỏ đến đối tượng tiếp theo.
+ Khi giảm
con trỏ đối tượng
, nó sẽ trỏ đến đối tượng đứng trước. Ví dụ 2.2
// Pointers to objects.
#include <iostream.h>

class samp {
int a, b;
public:

samp(int n, int m)
{ a = n; b = m; }
int get_a() { return a; }
int get_b() { return b; }
};


75
75

Bài tập II 1. Hãy viết lại ví dụ 2.2 chương 3 để cho nó hiển thò nội dung của mảng ob theo thứ
tự ngược lại.

2. Hãy viết lại ví dụ 1.3 chương 3 để truy cập mảng hai chiều qua con trỏ. III/ Con trỏ this
this
là con trỏ được truyền tự động cho bất kỳ hàm thành viên nào khi được gọi và
nó là con trỏ tới đối tượng tạo ra lời gọi hàm.

Ví dụ, cho câu lệnh ob.f1() ; // ob là đối tượng

Hàm f1() tự động được truyền con trỏ ob là đối tượng tạo ra lời gọi hàm. Con trỏ này
được xem là
this
.

Chỉ có các hàm thành viên được truyền con trỏ this.
Hàm friend không có con trỏ
this
.
Con trỏ this có nhiều sử dụng, kể cả việc giúp quá tải các toán tử.

//
tham chiếu trực tiếp các biến item[], cost, on_hand
strcpy(item, i);
cost = c;
on_hand = o;
}
void show();
};

void inventory::show()
{
cout << item;
cout << ": $" << cost;
cout << " On hand: " << on_hand << "\n";
}

int main()
{
inventory ob("wrench", 4.95, 4);

ob.show();
return 0;
} •
Khi một hàm thành viên được gọi,
nó tự động được truyền con trỏ this trỏ về đối
tượng tạo ra lời gọi
. Chương trình có thể viết lại :

}
void show();
};

void inventory::show()
{
cout << this->item; // use this to access members
cout << ": $" << this->cost;
cout << " On hand: " << this->on_hand << "\n";
}
int main()
{
inventory ob("wrench", 4.95, 4);

ob.show();
return 0;
} Bài tập III

Hãy chuyển tất cả các tham chiếu thích hợp đối với các thành viên của lớp thành
tham chiếu con trỏ this.
#include <iostream.h>

class myclass {
int a, b;
public:
myclass(int n, int m) { a = n; b = m; }
int add() { return a+b; }

new
dùng để cấp phát bộ nhớ động và toán tử
delete
dùng giải phóng bộ
nhớ đã cấp phát.

Cú pháp p_var =
new
data_type;

delete
p_var;

data_type
chỉ đònh kiểu đối tượng muốn cấp phát bộ nhớ
p_var
con trỏ tới kiểu đó Giống như hàm malloc(), nếu không đủ bộ nhớ theo yêu cầu cấp phát thì toán tử
new sẽ trả về con trỏ NULL. Toán tử delete được gọi chỉ với một con trỏ đã được
cấp phát trước đó qua toán tử new. Nếu gọi delete với một con trỏ không hợp lệ, hệ
thống cấp phát sẽ bò hủy, và có thể làm hỏng chương trình.

Các ưu điểm
+ toán tử new tự động cấp phát bộ nhớ để giữ một đối tượng có kiểu được chỉ rõ.
+ toán tử new tự động trả về một con trỏ có kiểu được chỉ rõ.
+ toán tử new và delete có thể được quá tải.
+ có thể khởi đầu đối tượng được cấp phát động.
Chương 3

cout << "Here is integer at p: " << *p << "\n"; delete p
; // release memory
return 0;
} •
Cấp phát động một đối tượng

Ví dụ 4.2
// Allocating dynamic objects.
#include <iostream.h>

class samp {
int i, j;
public:
void set_ij(int a, int b) { i=a; j=b; }
Chương 3
Mảng, Con trỏ, Tham chiếu
80
80
int get_product() { return i*j; }
};


hiển thò.
2/ Các đặc điểm của new và delete
+ các đối tượng được cấp phát động một giá trò đầu

p_var = new data_type(
initial_value
)
;

Trích đoạn Các tham chiếu độc lập và các hạn chế
Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status