Tài liệu Ngôn ngữ lập trình C++ 1: Ngôn ngữ lập trình C++1 THAM CHIẾU (Reference) Tham chiếu là gì? Giới hạn của tham chiếu Truyền tham chiếu cho hàm Hàm trả về nhiều giá trị Hàm tạo bản sao Con trỏ và tham chiếu Tham chiếu con trỏ THAM CHIẾU LÀ GÌ ? Là một bí danh của biến khác Khi tạo ra một tham chiếu, gán nó lên một đối tượng khác thì tham chiếu hoạt động như chính đối tượng đã gán đến nó Cú pháp: Kiểu &TênThamChiếu = MộtĐốiTượngĐãTồnTại; Ví dụ: Sinhvien sv_lop_T14A; Sinhvien &sv1 = sv_lop_T14A; THAM CHIẾU LÀ GÌ ? Địa chỉ của tham chiếu: là địa chỉ của đối tượng mà nó tham chiếu đến. Tương tự như trong thực tế khi một bí danh đã được gắn với một người nào đó cụ thể. Chú ý: không thể gán lại thêm một lần nữa tên của tham chiếu cho một đối tượng khác. GIỚI HẠN CỦA THAM CHIẾU Có thể thực hiện tham chiếu với đối tượng nào? phải tham chiếu đến một đối tượng cụ thể! Ví dụ các khai báo sau là sai 1) int &sn=int; 2) Sinhvien &sv1=Sinhvien; Các khai báo đúng 1) int sn=20; int &i=sn; 2) Sinhvien sv_lop_T14A; Sinhvien &sv1 = ...
16 trang |
Chia sẻ: hunglv | Lượt xem: 1745 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Ngôn ngữ lập trình C++ 1, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Ngôn ngữ lập trình C++1 THAM CHIẾU (Reference) Tham chiếu là gì? Giới hạn của tham chiếu Truyền tham chiếu cho hàm Hàm trả về nhiều giá trị Hàm tạo bản sao Con trỏ và tham chiếu Tham chiếu con trỏ THAM CHIẾU LÀ GÌ ? Là một bí danh của biến khác Khi tạo ra một tham chiếu, gán nó lên một đối tượng khác thì tham chiếu hoạt động như chính đối tượng đã gán đến nó Cú pháp: Kiểu &TênThamChiếu = MộtĐốiTượngĐãTồnTại; Ví dụ: Sinhvien sv_lop_T14A; Sinhvien &sv1 = sv_lop_T14A; THAM CHIẾU LÀ GÌ ? Địa chỉ của tham chiếu: là địa chỉ của đối tượng mà nó tham chiếu đến. Tương tự như trong thực tế khi một bí danh đã được gắn với một người nào đó cụ thể. Chú ý: không thể gán lại thêm một lần nữa tên của tham chiếu cho một đối tượng khác. GIỚI HẠN CỦA THAM CHIẾU Có thể thực hiện tham chiếu với đối tượng nào? phải tham chiếu đến một đối tượng cụ thể! Ví dụ các khai báo sau là sai 1) int &sn=int; 2) Sinhvien &sv1=Sinhvien; Các khai báo đúng 1) int sn=20; int &i=sn; 2) Sinhvien sv_lop_T14A; Sinhvien &sv1 = sv_lop_T14A; TRUYỀN THAM CHIẾU CHO HÀM(1) Nhắc lại về truyền tham trị: Đối số truyền cho hàm là các giá trị Câu lệnh return cho phép trả về một giá trị void Doicho(int x, int y) { int tam; tam=x; x=y; y=tam; } Giá trị của các đối số x, y chỉ được đổi chỗ cho nhau trong pham vi của hàm TRUYỀN THAM CHIẾU CHO HÀM(2) Giải quyết bằng con trỏ void Doicho(int *px, int *py); { int tam; tam=*px; *px=*py; *py=tam; } Khi gọi hàm phải truyền đối số là con trỏ int x=5,y=7; Doicho(&x,&y); Lúc này 2 giá trị x và y mới thực sự được đổi chỗ cho nhau TRUYỀN THAM CHIẾU CHO HÀM(3) Giải quyết bằng truyền tham chiếu đến hàm: Đối tượng thực sự được truyền đến hàm Có thể sửa đổi được giá trị của đổi tượng void Doicho(int &x, int &y) { int tam; tam=x; x=y; y=tam;} Khi goi hàm, biến được truyền trưc tiếp, 2 giá trị x và y thực sự được đổi chỗ cho nhau Doicho(x,y); HÀM TRẢ VỀ NHIỀU GIÁ TRỊ(1) Hàm chỉ có thể trả về một giá trị. Chúng ta sẽ sử dụng kỹ thuật truyền tham chiếu để thay đổi các đối tượng ngoài ngay bên trong hàm, và như vậy hàm có thể “trả về” nhiều giá trị Sử dụng con trỏ Sử dụng tham chiếu HÀM TRẢ VỀ NHIỀU GIÁ TRỊ(3) Sử dụng con trỏ void HinhTron(int r, int *dientich, int *chuvi) { *dientich = 3.14 * r * r; *chuvi = 2 * 3.14 * r; } Khi gọi hàm phải truyền địa chỉ RutgonPS(r, &dt,&cv); HÀM TRẢ VỀ NHIỀU GIÁ TRỊ(4) Sử dụng tham chiếu void HinhTron(int r, int &dientich, int &chuvi) { dientich = 3.14 * r * r; chuvi = 2 * 3.14 * r; } Khi gọi hàm phải truyền địa chỉ RutgonPS(r, dt, cv); HÀM TẠO BẢN SAO (1) (copy constructor) Hàm tạo bản sao: Sinhvien::Sinhvien() { Cout<<“Ham tao\n”; } Sinhvien::Sinhvien(Sinhvien&) { Cout<<“Ham tao ban sao\n”; } HÀM TẠO BẢN SAO (2) Đối số ở dạng tham trị hoặc khi hàm trả về giá trị thì một bản sao của đối số sẽ được tạo ra. Nếu đối số là đối tượng của lớp thì hàm tạo bản sao sẽ được gọi. Giả sử có 2 hàm Sinhvien Ham1(Sinhvien sv); Sinhvien Ham2(Sinhvien *sv); Khi hàm 1 được gọi, phải truyền đối số ở dạng tham trị nên hàm tạo bản sao được gọi Khi hàm 2 được gọi, truyền đối số ở dạng tham chiếu, hàm tạo bản sao không được gọi CON TRỎ & THAM CHIẾU Qua các ví dụ đã phân tích, việc sử dụng con trỏ và tham chiếu cho ta kết quả giống nhau Nên sử dụng tham chiếu thay cho con trỏ nếu có thể Nếu ta làm việc với nhiều đối tượng, chỉ có cách duy nhất là sử dụng con trỏ Hơn nữa tham chiếu không thể nhận giá trị null THAM CHIẾU CON TRỎ (Pointer Reference) Tham chiếu con trỏ: Được dùng khi muốn thay đổi giá trị địa chỉ trong con trỏ. Ví dụ: void Doicho(Sinhvien *&sv1, Sinhvien *&sv2) { SinhVien *temp; temp = sv1; sv1 = sv2; sv2 = temp; } Bài tập 1.Xây dựng lớp hình chữ nhật với các thuộc tính sau: Xtt,Ytt, Xpd, Ypd- là tọa độ trái-trên, phải-dưới của một hình chữ nhật. Với các phương thức sau: Hàm tạo, Hàm hủy, Phương thức đặt giá trị cho các thuộc tính, và phương thức lấy giá trị của các thuộc tính(dùng tham chiếu và con trỏ). Viết chương trình minh họa. 2. Viết chương trình xây dựng lớp Điểm trong không gian 2 chiều với các thuộc tính sau: hoành độ x, tung độ y là các số thực. Với các phương thức sau: hàm tạo, hàm hủy, phương thức đặt giá trị cho x và y, phương thức lấy giá trị x, phương thức lấy giá trị y và phương thức lấy cả 2 giá trị x, y. Viết chương trình minh họa.
Các file đính kèm theo tài liệu này:
- ngôn ngữ lập trình C++ 1 (2).ppt