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

Đề tài: Định nghĩa phép toán tăng ++ trong C++

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

    Mặc định Định nghĩa phép toán tăng ++ trong C++

    C++ Code:
    1. class ThoiDiem
    2. {
    3.     long tsgiay;
    4. public:
    5.     ThoiDiem(int g = 0, int p = 0, int gy = 0){set(g,p,gy);}//khoi tao mac dinh gio=0 phut=0 giay =0 het
    6.     void set(int g,int p,int gy){tsgiay=g*3600+p*60+gy;}//đổi ra giây
    7.     void Tang();
    8.     ThoiDiem &operator ++();
    9.     ThoiDiem operator ++(int);
    10. };
    11. void ThoiDiem::Tang()
    12. {
    13.     tsgiay = ++tsgiay%86400;//tăng giây lên 1 đơn vị
    14. }
    15.  
    16. ThoiDiem &ThoiDiem::operator ++()
    17. {
    18.     Tang();
    19.     return *this;
    20. }
    21. ThoiDiem ThoiDiem::operator ++(int) //tham số giả
    22. {
    23.     ThoiDiem t = *this;
    24.     Tang();
    25.     return t;
    26. }
    27. void main()
    28. {
    29.  
    30.     ThoiDiem t(23,59,59),t1,t2;
    31. //  t1 = ++t; // t.operator ++();
    32.         // t = 0:00:00, t1 = 0:00:00
    33.     t1 = t++; // t.operator ++(int);
    34.         // t = 0:00:01, t1 = 0:00:00
    35. }
    Ở đây mình không hiểu là tại sao mình định nghĩa phép toán"++" như trên thì khi mình ghi t1=t++; nó lại chọn hàm ++ có tham số giả tại sao không là hàm kia sao nó biết???.why???? Với lại mình không hiểu cái tham số giả nó làm nhiệm vụ gì và 2 cái hàm ++ kia nó giống y chang nhau làm sao phân biết???có ai nói cho mình biết không???

  2. #2
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    Trích dẫn Nguyên bản được gửi bởi demontaihack Xem bài viết
    [CODE]
    Ở đây mình không hiểu là tại sao mình định nghĩa phép toán"++" như trên thì khi mình ghi t1=t++; nó lại chọn hàm ++ có tham số giả tại sao không là hàm kia sao nó biết???.why???? Với lại mình không hiểu cái tham số giả nó làm nhiệm vụ gì và 2 cái hàm ++ kia nó giống y chang nhau làm sao phân biết???có ai nói cho mình biết không???
    Đấy gọi là quá tải hàm khi cậu cho tham số giả vào hàm kia thì trình biên dịch tự hiểu đó là t++ chứ ko phải là ++t (cái này bởi vì nó quy định thế không thắc mắc nhiều )
    In code we trust

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    13

    Giải thích như vậy sao mình hiểu.Sao lại quy định vậy.Mà tham số giả nó làm nhiệm vụ gì??Hic hic mình nghĩ t++; tương đương với t.operator ++(int); nhưng nếu vậy tại sao mình ghi t++1;nó lại báo lỗi,có ai giải thích làm sao cho tớ hiểu ko??

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

    1 không phải là l-value. l-value là gì ?

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    13

    mình gà wá nên ko hiểu ý bạn nói gì.bạn có thể nói chi tiết hơn ko?

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

    Mặc định Định nghĩa phép toán tăng ++ trong C++

    theo mình nghĩ thì lỗi nhập nhằng bạn à.
    vì vậy sao bạn ko gọi phưong thức kiểu t1.,t2..
    bạn nhận diện ++t và t++ bằng tham số ảo là (int).vì vậy cần gọi như trên thì sẽ thấy được tác dụng của tam số ảo.
    Có gì sai thì bạn chỉ mình nha!!

  7. #7
    Ngày gia nhập
    03 2008
    Bài viết
    13

    đoạn code trên ko hề bị lỗi nhập nhằng đâu bạn

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

    mình gà wá nên ko hiểu ý bạn nói gì.bạn có thể nói chi tiết hơn ko?
    Đọc cái link đó chưa ?
    Ở đây mình không hiểu là tại sao mình định nghĩa phép toán"++" như trên thì khi mình ghi t1=t++; nó lại chọn hàm ++ có tham số giả tại sao không là hàm kia sao nó biết???.why???? Với lại mình không hiểu cái tham số giả nó làm nhiệm vụ gì và 2 cái hàm ++ kia nó giống y chang nhau làm sao phân biết???có ai nói cho mình biết không???
    2 cái hàm định nghĩa đó làm sao giống nhau được : signature của chúng là khác nhau. Compiler đủ thông minh để nhận ra.

  9. #9
    Ngày gia nhập
    03 2008
    Bài viết
    13

    mình hiểu nó khác nhau.Nhưng mà sao nó biết cái nào thì t++ cái nào ++t .thêm vào tham số giả vào có tác dụng gì.Khi thêm tham số giả vào thì tại sao là t++;-->mỉnh ko hiểu!hic hic!!!Mong bạn thông cảm cho cấp độ gà của mình nha!

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

    mình hiểu nó khác nhau.Nhưng mà sao nó biết cái nào thì t++ cái nào ++t .thêm vào tham số giả vào có tác dụng gì.Khi thêm tham số giả vào thì tại sao là t++;-->mỉnh ko hiểu!hic hic!!!Mong bạn thông cảm cho cấp độ gà của mình nha!
    Vấn đề của cậu là cậu không chịu đọc cho kĩ và cố tìm cái không thể
    Trong C++, khi cậu tạo 1 biến int x;
    khi cậu dùng
    - x++
    - ++x
    cậu mong muốn điều gì sẽ xảy ra ? 1 cái tăng trước và 1 cái tăng sau. Thế tui hỏi ngược lại cậu có bao h cậu viết :
    C++ Code:
    1. x++ 1;
    Nếu cậu nói có, thì tui hỏi cậu, cậu đang chờ đợi điều gì xảy ra sau câu lệnh trên ? Does it make any sense ?
    Và coi kĩ lại 2 cái defintion của 2 toán tử ++ và ++(int).
    C++ Code:
    1.  integer& integer::operator++(){
    2.   ++value;
    3.   return *this;
    4. }
    5.  
    6. integer integer::operator++(int){
    7.   integer hold(*this);
    8.   ++(*this);
    9.   return hold;
    10. }
    1 thằng trả về tham chiếu đến đối tượng.
    1 thằng trả về đối tượng tạm thời.
    Cái biến int đó chỉ là biến giả nó chỉ gắn vào để tạo ra 1 chữ kí khác biệt của tham số truyền vào hàm chứ nó hoàn toàn không có tác dụng gì hết. Và đó là cách mà người ta sử dụng quá tải toán tử trong C++, bắt buộc phải là đối kiểu int, cậu thấy khó hiểu thì cứ đặt tên 1 biến là gì đó ví dụ :
    C++ Code:
    1. integer integer::operator++(int unused){
    2.   integer hold(*this);
    3.   ++(*this);
    4.   return hold;
    5. }
    .Compiler sẽ dựa vào chữ kí của hàm để phân biệt thằng nào là post và thằng nào là pre. Nếu cậu đọc thật kĩ 2 cái đoạn code trên chừng vài lần tui tin cậu sẽ tự hiểu mà chẳng cần ai giải thích nữa . Good luck !
    Đọc cái này sẽ dễ hiểu hơn :
    C++ Code:
    1. #include <iostream>
    2.  
    3. class integer{
    4. private :
    5.   int value;
    6. public:
    7.   integer():value(10){
    8.   }
    9.   integer& operator++ ();
    10.   integer operator++ (int);
    11.   std::ostream& show(std::ostream& oss) const{
    12.     return oss << value << "\n";
    13.   }
    14. };
    15.  
    16. std::ostream& operator << (std::ostream& oss, const integer& rhs){
    17.   return rhs.show(oss);
    18. }
    19.  
    20. integer& integer::operator++(){
    21.   ++value;
    22.   return *this;
    23. }
    24.  
    25. integer integer::operator++(int){
    26.   integer hold(*this);
    27.   ++(*this);
    28.   return hold;
    29. }
    30.  
    31. int main(){
    32.   integer my;
    33.   std::cout << my++;
    34.   std::cout << ++my;
    35.   return 0;
    36. }
    Đã được chỉnh sửa lần cuối bởi rox_rook : 14-04-2008 lúc 07:37 AM.

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

  1. Lập trình C++0x Nạp chồng toán tử tăng trước ++ và toán tử tăng sau trong lớp Time
    Gửi bởi programmingvietnam trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 03-08-2014, 09:38 AM
  2. Xu thế thay đổi nghành công nghệ thông tin trong nước
    Gửi bởi anhduongtalents trong diễn đàn Kinh nghiệm CNTT
    Trả lời: 1
    Bài viết cuối: 11-06-2012, 09:06 AM
  3. Công nghệ mới giúp ứng dụng tinh nghệ trong ngăn ngừa và điều trị ung thư
    Gửi bởi vesim trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 31-08-2011, 02:39 PM
  4. Tuổi nghề của người trong ngành công nghệ phần mềm???
    Gửi bởi vuduykhanh trong diễn đàn Kinh nghiệm CNTT
    Trả lời: 19
    Bài viết cuối: 11-03-2010, 04:58 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