Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: xử lý operator >> và << trong template!

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Cool xử lý operator >> và << trong template!

    Mình có một bài tập sử dụng template,mà lại chưa được hướng dẫn phần này,chủ yếu là tự nghiên cứu thôi.Có 1 phần nhỏ này mong mọi người giúp đỡ.
    Mình xin trích 1 đoạn code nhỏ như sau:
    C++ Code:
    1.  
    2. #ifndef _Array_h_
    3. #define _Array_h_
    4.  
    5. template <class T>
    6. class Array
    7. {
    8.     private:
    9.         T *m_pElement;
    10.         int m_iLength;
    11.     public:
    12. //      friend istream& operator >> (istream& is,Array &x);
    13. //      friend ostream& operator << (ostream& os,Array &x);
    14.         istream& operator >> (istream& is,Array &x);
    15.         {
    16.             cout<<"Nhap so phan tu? ";
    17.             is>>m_iLength;
    18.             cout<<"Nhap cac phan tu? ";
    19.             for (int i=0;i<x.m_iLength;i++)
    20.                 is>>m_pElement[i];
    21.                         return is;
    22.        
    23.         }
    24.  
    25.         ostream& operator << (ostream& os,Array &x)
    26.         {
    27.             for(int i=0;i<x.m_iLength;i++)
    28.                 os<<x.m_pElement[i];
    29.             return os;
    30.         }
    31. };

    Đoạn code trên mình trích trong file .h,mình muốn hỏi là muốn khai báo 2 toán tử >> và << thì mình được học là dùng hàm friends rồi qua file .cpp khai báo 2 hàm đó.Nhưng nếu mình muốn viết tại file .h trên luôn thì viết thế nào? Mình viết như trong đoạn code thì báo lỗi.
    Mong mọi người giúp đỡ.Thanks !
    Đã được chỉnh sửa lần cuối bởi romanticdevil88 : 21-10-2008 lúc 05:07 PM.

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn chưa include thư viện iostream
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    09 2007
    Bài viết
    724

    1 - lần sau nếu mà có Error thì ít nhất bạn phải copy hay là miêu tả cái error đó ra thì mọi người mới giúp bạn được
    2- giải thích như sau:

    C++ Code:
    1. istream& operator >> (istream& is,Array<T>/*class template mà bạn khai báo như vầy nó la làng lên là đúng rồi.*/ &x); // chổ này có dấu ; bỏ nó đi
    2.         {
    3.             cout<<"Nhap so phan tu? ";
    4.             cin>>m_iLength; // tại sao trên này để this
    5.             cout<<"Nhap cac phan tu? ";
    6.             for (int i=0;i<x.m_iLength;i++) // dưới này là set là x.m_iLenght nhỉ :)
    7.                 cin>>m_pElement[i];
    8.        
    9.         }

    Nếu mà khai báo trong một lớp thì operator<<,>> nó không có phương thức operator<< và operator có 2 tham số đầu vào mà chỉ một tham số istream hoặc là ostream thôi.

    vì khi bạn gọi nói thì biến gọi nó sẽ đóng vai trò là x trong khai báo trên của bạn .

    ps: vẫn chưa biết gọi trong trường hợp khai báo thế này như thế nào.

  4. #4
    Ngày gia nhập
    10 2008
    Bài viết
    2

    Mình thấy nên viết theo dạng friend

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Post code nguyên bài lên đi cậu( main đâu ? )
    - Tên compiler
    - Lỗi của compiler copy và paste hết ra -> cậu càng đọc nhiều và hiểu compiler error cậu sẽ tiến bộ trong việc debugging.

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Mặc định xử lý operator >> và << trong template!

    Xin lỗi mọi người,vì trong lúc làm bài,mình thử nhiều cách,chưa chỉnh sửa lại cho nhất quán.Mình chỉnh lại ròi.
    C++ Code:
    1.  
    2. #ifndef _Array_h_
    3. #define _Array_h_
    4. #include <iostream.h>
    5.  
    6. template <class T>
    7. class Array
    8. {
    9.     private:
    10.         T *m_pElement;
    11.         int m_iLength;
    12.     public:
    13. //      friend istream& operator >> (istream& is,Array &x);
    14. //      friend ostream& operator << (ostream& os,Array &x);
    15.         istream& operator >> (istream& is,Array<T> &x)
    16.         {
    17.             cout<<"Nhap so phan tu? ";
    18.             is>>x.m_iLength;
    19.             cout<<"Nhap cac phan tu? ";
    20.             for (int i=0;i<x.m_iLength;i++)
    21.                 is>>x.m_pElement[i];
    22.                         return is;
    23.        
    24.         }
    25.  
    26.         ostream& operator << (ostream& os,Array<T> &x)
    27.         {
    28.             for(int i=0;i<x.m_iLength;i++)
    29.                 os<<x.m_pElement[i];
    30.             return os;
    31.         }
    32. };

    Mình đã chỉnh lại như trên,nó báo lỗi thế này:
    error C2804: binary 'operator >>' has too many parameters
    Vì yêu cầu bài tập phải khai báo >> và << ngay trong class.Mọi người giúp mình nha.thanks

  7. #7
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    bạn thiếu friend trước chỗ ostream và istream
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  8. #8
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Thanks mọi người rất nhiều.Mình làm dc ròi,và học được cũng nhiều nữa !

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Thanks mọi người rất nhiều.Mình làm dc ròi,và học được cũng nhiều nữa !
    Cậu làm xong chưa ? Nếu xong thì post lên cho tui coi với ! Bài này ngó đơn giản nhưng cũng hay lắm đó !

Các đề tài tương tự

  1. Toán tử operator^(int x) trong lơp đa thức không sử dụng được?
    Gửi bởi nguoirung1.6 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 14-04-2012, 10:23 PM
  2. Lập trình C++ Lỗi trong hàm toán tử operator
    Gửi bởi ga_ituct trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 05-12-2010, 03:59 PM
  3. Kỹ thuật C++ Template Method có liên quan gì đến template trong C++ ko?
    Gửi bởi ten_truycap trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 22-10-2010, 11:26 PM
  4. toán tử Operator>> và Operator<< trên VC++6.0?
    Gửi bởi newbie.blind trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 05-10-2010, 03:43 PM
  5. Cách xây dựng và sử dụng template và mảng template trong C++?
    Gửi bởi nhatnha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 03-08-2010, 06:24 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn