Trả đối tượng từ hàm

3 151 0
Trả đối tượng từ hàm

Đang tải... (xem toàn văn)

Thông tin tài liệu

Chương 2 Lớp , Đ ối tượng và tính đóng gói 54 54 } VII/ Trả đối tượng từ hàmĐối tượng trả về từ hàm thông qua câu lệnh return . Khi đó một đối tượng tạm được tự động tạo ra để giữ giá trò trả về. Chính đối tượng này thực sự được trả về bởi hàm. Sau khi giá trò được trả về, đối tượng này bò hủy, sự hủy đối tượng tạm có thể gây ra tác dụng ngoài ý muốn. Ví dụ 7.1 // Returning an object #include <iostream.h> #include <string.h> class samp { char s[80]; public: void show() { cout << s << "\n"; } void set(char *str) { strcpy(s, str); } }; // Return an object of type samp samp input() { char s[80]; samp str; cout << "Enter a string: "; cin >> s; str.set(s); return str; } Chương 2 Lớp , Đ ối tượng và tính đóng gói 55 55 int main() { samp ob; // assign returned object to ob ob = input() ; // Enter a string: Hello ↵ ob.show(); // Hello return 0; } Ví dụ 7.2 Phải thận trọng khi hàm trả về đối tượng, khi đối tượng này có chứa hàm hủy. // An error generated by returning an object. #include <iostream.h> #include <string.h> #include <stdlib.h> class samp { char *s; public: samp() { s = '\0'; } ~samp() { if(s) free(s) ; cout << "Freeing s\n"; } void show() { cout << s << "\n"; } void set(char *str); }; // Load a string. void samp::set(char *str) { s = (char *) malloc(strlen(str)+1); if(!s) { cout << "Allocation error\n"; exit(1); } strcpy(s, str); } Chương 2 Lớp , Đ ối tượng và tính đóng gói 56 56 // Return an object of type samp. samp input() { char s[80]; samp str; cout << "Enter a string: "; cin >> s; str.set(s); return str; } int main() { samp ob; // assign returned object to ob ob = input() ; // This causes an error!!!! ob.show(); return 0; } Hãy giải thích kết quả của chương trình ? Enter a astring: Hello Freeing s Freeing s Hello Freeing s Null pointer assignment Khi một đối tượng được trả về từ một hàm, một đối tượng tạm được dùng để thực hiện sự trả về sẽ làm hủy bộ nhớ (được cấp phát cho chuổi s) của đối tượng được gọi. Để tránh tình trạng này có thể sử dụng hàm tạo bản sao. . 2 Lớp , Đ ối tượng và tính đóng gói 54 54 } VII/ Trả đối tượng từ hàm • Đối tượng trả về từ hàm thông qua câu lệnh return . Khi đó một đối tượng tạm được. ra để giữ giá trò trả về. Chính đối tượng này thực sự được trả về bởi hàm. Sau khi giá trò được trả về, đối tượng này bò hủy, sự hủy đối tượng tạm có thể

Ngày đăng: 29/09/2013, 07:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan