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: