Các tham chiếu độc lập và các hạn chế

Một phần của tài liệu Mảng con trỏ và tham chiếu (Trang 32 - 35)

1/ Tham chiếu độc lập (independent reference) là một biến tham chiếu có tác dụng chỉ là một tên khác cho một biến khác.

Tham chiếu độc lập phải được khởi đầu khi khai báo, do các tham chiếu không thể được gán những giá trị mới.

Các lập trình viên thường ít sử dụng tham chiếu độc lập. 2/ Một số hạn chế

+ không thể tham chiếu đến một tham chiếu khác. + không thể có điạ chỉ của tham chiếu.

+ không thể tạo một mảng các tham chiếu + không thể tham chiếu một trường bit.

+ các tham chiếu phải được khởi đầu trừ khi chúng là các thành viên của lớp, là các giá trị trả về hoặc là các tham số của hàm.

Ví dụ 8.1

#include <iostream.h> int main()

{ int x;

int &ref = x; // create an independent reference x = 10; // these two statements

ref = 10; // are functionally equivalent ref = 100;

// this prints the number 100 twice cout << x << ' ' << ref << "\n"; return 0;

}

• Một tham chiếu độc lập có thể tham chiếu đến một hằng.

Ví dụ 8.2

const int &ref = 10;

1. Cho lớp sau, hãy tạo một mảng hai chiều 3x4 và cho mỗi đối tượng trong mảng một giá trị đầu. class a_type { double a, b; public: a_type(double x, double y) { a = x; b = y; }

void show() { cout << a << ' ' << b << "\n"; } };

2. Hãy thay đổi lời giải đối với bài toán trên để có thể truy cập mảng bằng cách dùng con trỏ.

3. Hãy tạo hàm recip() nhận một tham số tham chiếu double. Hãy cho hàm này thay đổi giá trị của tham số đó. Hãy viết một chương trình cho hàm này hoạt động.

4. Hãy sửa đổi chương trình sau với toán tử new và delete #include <iostream.h> #include <string.h> #include <stdlib.h> #include <malloc.h> class strtype { char *p; int len; public: strtype(char *ptr); ~strtype(); void show(); }; strtype::strtype(char *ptr) {

len = strlen(ptr);

p = (char *) malloc(len+1); if(!p) {

cout << "Allocation error\n"; exit(1); } strcpy(p, ptr); } strtype::~strtype() { cout << "Freeing p\n"; free(p); } void strtype::show() {

cout << p << " - length: " << len; cout << "\n";

}

int main() {

strtype s1("This is a test."), s2("I like C++."); s1.show();

s2.show(); return 0; }

Một phần của tài liệu Mảng con trỏ và tham chiếu (Trang 32 - 35)