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

Đề tài: Làm sao quá tải toán tử [][] trong lập trình C++?

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

    Mặc định Làm sao quá tải toán tử [][] trong lập trình C++?

    Cho mình hỏi có cách nào quá tải cho toán tử [][] này không ? Chả là mình muốn xài subscript ví dụ : A[-1][-3], nên tính định nghĩa lại nó mà mò hoài không ra, hic hịc ! Bạn nào giúp mình với nhé ! Thanks ^^ !

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

    Mặc định Làm sao quá tải toán tử [][] với lập trình C++?

    Hic ! Để luôn chắc topic này chết luôn quá ! Thôi đành tự biên tự diễn vây. Đây là cách tạo indice ( subscript ) âm cho mãng 2 chiều, kĩ thuật thì để ứng dụng cho kĩ thuật lính canh , 1 kĩ thuật được dùng khá rộng rãi cho cài đặt thuật toán .

    C++ Code:
    1. #include <iostream>
    2. #include <vector>
    3. #include <iomanip>
    4.  
    5. class Matrix
    6. {
    7.     std::vector<int> data;
    8.     unsigned n;
    9.  
    10.   public:
    11.       Matrix(unsigned n, unsigned m):n(n),data(n*m,0){
    12.       }
    13.  
    14.       int &element(unsigned row, unsigned col)
    15.       {
    16.           return data[row*n+col];
    17.       }
    18.  
    19.       class Nested
    20.       {
    21.           Matrix &Ob;
    22.           unsigned row;
    23.         public :
    24.  
    25.           Nested(Matrix &Ob, unsigned row):Ob(Ob),row(row){
    26.           }
    27.  
    28.           int &operator [] (unsigned col)
    29.           {
    30.               return Ob.element(row,col);
    31.           }
    32.       };
    33.  
    34.     Nested operator[](unsigned row)
    35.     {
    36.         return Nested(*this,row);
    37.     }
    38. };
    39.  
    40. int main()
    41. {
    42.     Matrix M(3,4);
    43.     for(int y = -3; y < 4; y++)
    44.     {
    45.         for( int x = -3; x < 3; ++x)
    46.             M[y][x]=x*y;
    47.     }
    48.     for(int y = -3; y < 4; y++)
    49.     {
    50.         for(int x = -3; x < 3; x++)
    51.             std::cout << M[y][x] << std::setw(4);
    52.         std::cout << std::endl << std::endl;
    53.     }
    54.     return 0;
    55. }

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    cái này là do cậu operator[] cho 1 pointer rồi, chỉ là 1 mánh thôi chứ ko thật sự như cậu nói.
    vào trong msdn search thử coi ?

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

    hì hì ! Hình như không có cách cho toán tử [][] này đâu, mình đọc thì chỉ thấy quá tải cho toán tử () này thì được thôi ! Cái này do ảnh hưởng đọc code pascal nhiều quá nên mình chỉ muốn dùng nó vào những kĩ thuật lính canh thui đó mà ^^! Thanks ý kiến của Kidkid ! MSDN thì mình mù tịt !

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Tớ nhớ trong sách có nói cái này , nhưng ko đọc kĩ lắm. Để tớ xem lại thử coi. Còn MSDN thì vào msdn.microsoft.com để search online hoặc cài msdn ở mấy cái đĩa ngoài tiệm đó để tìm offine. Thử coi.

  6. #6
    Ngày gia nhập
    03 2012
    Nơi ở
    Voz forum
    Bài viết
    28

    Mặc định Làm sao quá tải toán tử [][] trong lập trình C++?

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    hì hì ! Hình như không có cách cho toán tử [][] này đâu, mình đọc thì chỉ thấy quá tải cho toán tử () này thì được thôi ! Cái này do ảnh hưởng đọc code pascal nhiều quá nên mình chỉ muốn dùng nó vào những kĩ thuật lính canh thui đó mà ^^! Thanks ý kiến của Kidkid ! MSDN thì mình mù tịt !
    anh rr cho em hỏi số lượng tham số của hàm operator[](...) là bao nhiêu thế?
    Lao Động Hăng Say Tình Yêu Sẽ Đến...

    Love Mưa Lốc

  7. #7
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Trích dẫn Nguyên bản được gửi bởi rataki Xem bài viết
    anh rr cho em hỏi số lượng tham số của hàm operator[](...) là bao nhiêu thế?
    1.

    Nếu muốn nhiều hơn thì nên quá tải toán tử (), bao nhiêu tham số cũng được. Lúc đó, truy cập vào phần tử 2,3 của ma trận A sẽ là A(2,3).

  8. #8
    Ngày gia nhập
    03 2012
    Nơi ở
    Voz forum
    Bài viết
    28

    Trích dẫn Nguyên bản được gửi bởi boss14420 Xem bài viết
    1.

    Nếu muốn nhiều hơn thì nên quá tải toán tử (), bao nhiêu tham số cũng được. Lúc đó, truy cập vào phần tử 2,3 của ma trận A sẽ là A(2,3).
    bạn có thể cho mình ví dụ minh họa được không?cái phần này mình chưa hiểu lắm..cảm ơn bạn nhiều...
    Lao Động Hăng Say Tình Yêu Sẽ Đến...

    Love Mưa Lốc

  9. #9
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Trích dẫn Nguyên bản được gửi bởi rataki Xem bài viết
    bạn có thể cho mình ví dụ minh họa được không?cái phần này mình chưa hiểu lắm..cảm ơn bạn nhiều...
    Cứ làm như bình thường
    C++ Code:
    1. Type operator () (Type1 arg1, Type2, arg2, ...)
    2. {
    3.     // code
    4. }

  10. #10
    Ngày gia nhập
    03 2012
    Nơi ở
    Voz forum
    Bài viết
    28

    Trích dẫn Nguyên bản được gửi bởi boss14420 Xem bài viết
    Cứ làm như bình thường
    C++ Code:
    1. Type operator () (Type1 arg1, Type2, arg2, ...)
    2. {
    3.     // code
    4. }
    cám ơn bạn..mình đã hiểu mặc dù chưa kĩ lắm...
    Lao Động Hăng Say Tình Yêu Sẽ Đến...

    Love Mưa Lốc

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