//Trả về một tham chiếu tới một thành viên dữ liệu private

Một phần của tài liệu Dẫn nhập - tìm hiểu về hướng đối tượng C++ (Trang 26 - 27)

liệu private

39: int &Time::BadSetHour(int HH)40: { 40: {

41: Hour = (HH >= 0 && HH < 24) ? HH : 0;

42: return Hour; //Nguy hiểm trả về tham chiếu !!!43: } 43: }

44:

45: int main()46: { 46: {

47: Time T;

48: int &HourRef = T.BadSetHour(20);49: 49:

50: cout << "Hour before modification: " << HourRef << endl; << endl;

51: HourRef = 30; //Thayđổi với giá trị không hợp lệ52: cout << "Hour after modification: " << 52: cout << "Hour after modification: " <<

T.GetHour() << endl;

53: // Nguy hiểm: Hàm trả về một tham chiếu54: //có thểđược sử dụng như một lvalue 54: //có thểđược sử dụng như một lvalue 55: T.BadSetHour(12) = 74;

56: cout << endl <<

"*********************************" << endl

57: << "BAD PROGRAMMING PRACTICE!!!!!!!!!" << endl endl

58: << "BadSetHour as an lvalue, Hour: "59: << T.GetHour() 59: << T.GetHour()

60: << endl <<

"*********************************" << endl; 61: return 0;

62: }

Trong chương trình hàm BadSetHour() trả về một tham chiếu tới thành viên dữ liệu Hour. Chúng ta chạy ví dụ 3.11, kết quả ở hình 3.11

Hình 3.11: Kết quả của ví dụ 3.11

3.12 PHÉP GÁN BỞI TOÁN TỬ SAO CHÉP THÀNH VIÊN MẶC ĐỊNH

Toán tử gán (=) được sử dụng để gán một đối tượng cho một đối tượng khác của cùng một kiểu. Toán tử gán như thế bình thường được thực hiện bởi toán tử sao chép thành viên (Memberwise copy) – Mỗi thành viên của một đối tượng được sao chép riêng rẽ tới cùng thành viên ở đối tượng khác (Chú ý rằng sao chép thành viên có thể phát sinh các vấn đề nghiêm trọng khi sử dụng với một lớp mà thành viên dữ liệu chứa vùng nhớ cấp phát động).Các đối tượng có thể được truyền cho các tham số của hàm và có thể được trả về từ các hàm. Như thế việc truyền và trả về được thực hiện theo truyền giá trị – một sao chép của đối tượng được truyền hay trả về.: Ví dụ 3.12: Chương trình sau minh họa toán tử sao chép thành viên mặc định

CT3_12.CPP

1: #include <iostream.h>2: 2:

3: //Lớp Date đơn giản4: class Date 4: class Date

5: {

6: public:

7: Date(int = 1, int = 1, int = 1990); //Constructor mặc định mặc định 8: void Print(); 9: private: 10: int Month; 11: int Day; 12: int Year; 13: }; 14:

Một phần của tài liệu Dẫn nhập - tìm hiểu về hướng đối tượng C++ (Trang 26 - 27)