Trước khi đọc bài này chắc là ko ít người cảm thấy sốc khi nghe điều này. Có người sẽ nghĩ tôi chém gió, nhưng xin bạn hãy bình tĩnh vì sau khi xem 1 vài source sau bạn sẽ nghĩ lại đấy C++ Code: Select All | Show/Hide 1. #include <iostream> 2. using namespace std; 3. #include <conio.h> 4. 5. 6. void main() 7. { 8. int a=(3,5); 9. double b=(4,6.9); 10. cout<<a<<" "<<b; //a=5 và b=6.9 11. 12. for(int i=0;i<10,NULL;i++) //chả in ra cái gì cả 13. cout<<"langman"; // trong cái vòng lặp for này 14. 15. getch(); 16. } II. Bản chất của nó + nó là 1 toán tử có độ ưu tiên thấp gần nhất nên trong ví dụ ở mục I tôi phải dùng () để gom nhóm nó lại (cũng nhờ vậy mà trong các biểu thức a+2,b+3 ko sinh ra lỗi vì nó ưu tiên thấp nhất mà,nên được thự hiện sau cùng) + nó là toán tử 2 ngôi + giá trị trả về của toán tử này chính là đối tượng thứ 2 + thứ tự ưu tiên của nó từ trái sang phải ==> phép đa năng hóa bắt buộc phải trả về ==> phép đa năng hóa bắt buộc phải có 1 tham số nếu là phương thức của lớp ==> phép đa năng hóa bắt buộc phải có 2 tham số nếu là global function
III. Code đa năng hóa mẫu
C++ Code: Select All | Show/Hide 1. #include <iostream> 2. using namespace std; 3. 4. class A 5. { 6. public: 7. int operator,(A b); 8. int operator,(double n); 9. }; 10. 11. int operator,(A a,int c) 12. { 13. return c; 14. } 15. 16. void main() 17. { 18. }
IV. Chú ý và ngoại lệ
khi nằm trong cặp () của tiêu đề hàm,nguyên mẫu hàm, lời gọi hàm thì , hoàn toàn khác rồi , ko phải toán tử coma nữa nha Nguyên bản được gửi bởi langman ... Và đây là giải pháp tôi đề ra C++ Code: Select All | Show/Hide 1. #include <iostream> 2. using namespace std; 3. #include <conio.h> 4. 5. 6. class nguoi 7. { 8. private: 9. int chieucao; 10. int cannang; 11. public: 12. friend istream& operator>>(istream &is,nguoi &a); 13. }; 14. istream& operator>>(istream &is,nguoi &a) 15. { 16. cout<<"Nhap chieu cao va can nang :"; 17. return cin>>a.chieucao>>a.cannang; 18. } 19. 20. class giaovien:public nguoi 21. { 22. private: 23. int luongthang; 24. public: 25. friend istream& operator>>(istream &is,giaovien &a); 26. }; 27. istream& operator>>(istream &is,giaovien &a) 28. { 29. cin>>(nguoi&)a; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<< 30. cout<<"Nhap vao luong thang : "; 31. return cin>>a.luongthang; 32. } 33. 34. void main() 35. { 36. giaovien x; 37. cin>>x; 38. getch(); 39. } theo mình nên sử dụng is và os trong khi định nghĩa chồng toán tử << và toán tử >> như sau: Code: #include <iostream> #include <conio.h> using namespace std; class nguoi { private: int chieucao; int cannang; public: friend istream& operator >> (istream &is, nguoi &a); friend ostream& operator << (ostream &os, const nguoi &a); }; istream& operator >> (istream &is, nguoi &a) { cout << "Nhap chieu cao va can nang: "; return is >> a.chieucao >> a.cannang; } ostream& operator << (ostream &os, const nguoi &a) { return os << "Nhap chieu cao: " << a.chieucao << endl << "Can nang: " << a.cannang << endl; }