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

Đề tài: Toán tử đa năng 1 ngôi và 2 ngôi trong lập trình hướng đối tượng.

  1. #1
    Ngày gia nhập
    11 2011
    Nơi ở
    Viet Nam
    Bài viết
    34

    Wink Toán tử đa năng 1 ngôi và 2 ngôi trong lập trình hướng đối tượng.

    Mình đang học Lập trình hướng đối tượng nhưng còn yếu quá vừa rồi Kiểm tra thầy ra câu hỏi này mà không biết làm mọi người ai biết chỉ mình với.

    Đề: Cho class time (đại khái như sau)
    class time
    {
    private:
    int gio,phut,giay;
    public:
    time(int h=0,int p=0,int s=0);//ham khoi tao
    time(const time &);
    //cac phep so sanh
    bool operator > (const time &) const;
    ...................>=..........................;
    ....................<...........................;
    ....................<=.........................;
    ....................==.........................;
    .....................!=.........................;
    //cac phep so hoc
    time operator + (const time &) const;
    ................... - ...........................;
    time operator + (int);
    ................... -......;
    const time & operator ++ ();// ++x toan tu da nang 1 ngoi
    ............................. -- ....;
    time operator ++ (int);// x++ toan tu da nang 2 ngoi
    .................. -- ......;
    const time & operator += (int);
    };
    Hãy cài đặt các hàm:

    const time & operator ++ ();
    time operator ++ (int);
    const time & operator += (int);

    Hướng dẫn:
    VD: nhập 3 h 14p 45s và 15s sẽ xuất ra 3h 15p 00s
    nhập 12h 59p 20s và 40s sẽ xuất ra 13h 00P 00S
    nhập 8h 34p 55s và 35s sẽ xuất ra 8h 35p 30s
    nhập 23h 59p 40s và 40s sẽ xuất ra 00h 00p 20s

  2. #2
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi code_c Xem bài viết
    Mình đang học Lập trình hướng đối tượng nhưng còn yếu quá vừa rồi Kiểm tra thầy ra câu hỏi này mà không biết làm mọi người ai biết chỉ mình với.

    Đề: Cho class time (đại khái như sau)
    class time
    {
    private:
    int gio,phut,giay;
    public:
    time(int h=0,int p=0,int s=0);//ham khoi tao
    time(const time &);
    //cac phep so sanh
    bool operator > (const time &) const;
    ...................>=..........................;
    ....................<...........................;
    ....................<=.........................;
    ....................==.........................;
    .....................!=.........................;
    //cac phep so hoc
    time operator + (const time &) const;
    ................... - ...........................;
    time operator + (int);
    ................... -......;
    const time & operator ++ ();// ++x toan tu da nang 1 ngoi
    ............................. -- ....;
    time operator ++ (int);// x++ toan tu da nang 2 ngoi
    .................. -- ......;
    const time & operator += (int);
    };
    Hãy cài đặt các hàm:

    const time & operator ++ ();
    time operator ++ (int);
    const time & operator += (int);

    Hướng dẫn:
    VD: nhập 3 h 14p 45s và 15s sẽ xuất ra 3h 15p 00s
    nhập 12h 59p 20s và 40s sẽ xuất ra 13h 00P 00S
    nhập 8h 34p 55s và 35s sẽ xuất ra 8h 35p 30s
    nhập 23h 59p 40s và 40s sẽ xuất ra 00h 00p 20s
    Đây là đa năng hóa toán tử chứ không phải toán tử đa năng như bạn nói đâu
    Đa năng hóa toán tử có nghĩa là thêm chức năng cho nó. Bình thường chỉ có thể cộng hai số
    Nhưng khi đa năng xong ta có thể cộng 2 thời gian
    Ví dụ như:
    const time & operator ++ ();
    tức là sau khi đa năng bạn có thể thực hiện được time ++ giống như x++ (với x là một giá trị nào đó 1, 2, 3, ... n)

    ---- Thực chất việc làm đa năng là việc hàm hóa toán tử (bởi vì đơn giản nó là hàm toán tử ) Ta cài đặt từng chi tiết để khi dùng chỉ việc cộng 2 cái to bự thôi

    const time & operator ++ ();
    C++ Code:
    1. time & operator ++ ()
    2. {
    3.     gio ++;       // ta dùng toán tử ++ cho từng chi tiết
    4.     phut ++;     // để sau này có thể dùng time ++;
    5.     giay ++;
    6.     return this;
    7. }
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  3. #3
    Ngày gia nhập
    11 2011
    Nơi ở
    Viet Nam
    Bài viết
    34

    Trích dẫn Nguyên bản được gửi bởi beautifulsoul84hung Xem bài viết
    Đây là đa năng hóa toán tử chứ không phải toán tử đa năng như bạn nói đâu
    Đa năng hóa toán tử có nghĩa là thêm chức năng cho nó. Bình thường chỉ có thể cộng hai số
    Nhưng khi đa năng xong ta có thể cộng 2 thời gian
    Ví dụ như:
    tức là sau khi đa năng bạn có thể thực hiện được time ++ giống như x++ (với x là một giá trị nào đó 1, 2, 3, ... n)

    ---- Thực chất việc làm đa năng là việc hàm hóa toán tử (bởi vì đơn giản nó là hàm toán tử ) Ta cài đặt từng chi tiết để khi dùng chỉ việc cộng 2 cái to bự thôi


    C++ Code:
    1. time & operator ++ ()
    2. {
    3.     gio ++;       // ta dùng toán tử ++ cho từng chi tiết
    4.     phut ++;     // để sau này có thể dùng time ++;
    5.     giay ++;
    6.     return this;
    7. }
    thực ra mình mình biết cái hướng làm nhưng lại chả biết tí gì về cú pháp và câu lệnh nên...
    nhưng mà cái cài đặt của bạn trên còn thiếu rồi, thầy mình hường dẫn như sau.
    if(giay >=60)
    {
    giay=giay-60;
    phut=phut+1;
    }
    if(phut>=60)
    {
    phut=phut-60;
    gio=gio+1;
    }
    if(gio>=23)
    {
    gio=gio-23;//de quay ve gio tu 0h->23h
    }
    //Đại khái là cài đặt phải có thêm cái đoạn lệnh đó.
    Bạn nào cài đặt lại giúp mình với :(

  4. #4
    Ngày gia nhập
    12 2010
    Nơi ở
    Tp HCM
    Bài viết
    6

    Bạn nên hiểu mục đích của các hàm là như thế này:
    -Các hàm ĐN các phép so sánh >,<,==...là để khi ta đưa vào 2 đối tượng kiểu thời gian(VD:time t1,time t2) thì máy sẽ hiểu được và cho ta biết thời gian nào là lớn hơn(t1>t2,t1<t2 hay t1=t2...)
    Để định nghĩa các hàm này,mình thường quy đổi hết ra số giây,thời gian nào có số giây lớn hơn thì lớn hơn
    -Các hàm ĐN các phep số học +,++,--...là để máy hiểu được và cho ta biết t1+t2 =t3, t1++=t4 hay
    t2--=t5...với t3,t4,t5... cũng là một đối tượng kiểu time
    Có chút lưu ý thế này:
    time operator ++ ();
    time operator ++ (int);
    Hai hàm này cho ra kết quả giống nhau,nhưng hàm thứ nhất là toán tử 1 ngôi, tức là cộng trước(++t),còn hàm thứ 2 là toán tử 2 ngôi(t++) và "(int)" ở hàm thứ 2 chỉ là tham số giả để máy phân biệt giữa chúng mà thôi.
    Bạn hãy tham khảo mấy hàm này:

    Code:
    void time::settime()
    {
    	if(giay>59)
    	{
    		phut+=giay/60;
    		giay%=60;
    	}
    	if(phut>59)
    	{
    		gio+=phut/60;
    		phut%=60;
    	}
    	if(gio>23)
    		gio%=24;
    }
    time time::operator ++()
    {
    	++giay;
    	this->settime();
    	return *this;
    }
    time time::operator ++(int)
    {
    	giay++;
    	this->settime();
    	return *this;
    }

  5. #5
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi code_c Xem bài viết
    thực ra mình mình biết cái hướng làm nhưng lại chả biết tí gì về cú pháp và câu lệnh nên...
    nhưng mà cái cài đặt của bạn trên còn thiếu rồi, thầy mình hường dẫn như sau.
    if(giay >=60)
    {
    giay=giay-60;
    phut=phut+1;
    }
    if(phut>=60)
    {
    phut=phut-60;
    gio=gio+1;
    }
    if(gio>=23)
    {
    gio=gio-23;//de quay ve gio tu 0h->23h
    }
    //Đại khái là cài đặt phải có thêm cái đoạn lệnh đó.
    Bạn nào cài đặt lại giúp mình với :(
    Uh. Hum qua bận xem phim nên không để ý hóa ra là tăng giờ :">
    Nếu thế bạn viết 3 hàm next time đi. giờ sử dụng lại trong phút, phút sử dụng lại tăng giây
    Hàm toán tử ++a cũng chỉ cần gọi hàm nextSecond (). Còn phương pháp cài đặt mình đã nói
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  6. #6
    Ngày gia nhập
    11 2011
    Nơi ở
    Viet Nam
    Bài viết
    34

    Mặc định Toán tử đa năng 1 ngôi và 2 ngôi trong lập trình hướng đối tượng.

    Trích dẫn Nguyên bản được gửi bởi vcthanh Xem bài viết
    Bạn nên hiểu mục đích của các hàm là như thế này:
    -Các hàm ĐN các phép so sánh >,<,==...là để khi ta đưa vào 2 đối tượng kiểu thời gian(VD:time t1,time t2) thì máy sẽ hiểu được và cho ta biết thời gian nào là lớn hơn(t1>t2,t1<t2 hay t1=t2...)
    Để định nghĩa các hàm này,mình thường quy đổi hết ra số giây,thời gian nào có số giây lớn hơn thì lớn hơn
    -Các hàm ĐN các phep số học +,++,--...là để máy hiểu được và cho ta biết t1+t2 =t3, t1++=t4 hay
    t2--=t5...với t3,t4,t5... cũng là một đối tượng kiểu time
    Có chút lưu ý thế này:
    time operator ++ ();
    time operator ++ (int);
    Hai hàm này cho ra kết quả giống nhau,nhưng hàm thứ nhất là toán tử 1 ngôi, tức là cộng trước(++t),còn hàm thứ 2 là toán tử 2 ngôi(t++) và "(int)" ở hàm thứ 2 chỉ là tham số giả để máy phân biệt giữa chúng mà thôi.
    Bạn hãy tham khảo mấy hàm này:

    Code:
    void time::settime()
    {
    	if(giay>59)
    	{
    		phut+=giay/60;
    		giay%=60;
    	}
    	if(phut>59)
    	{
    		gio+=phut/60;
    		phut%=60;
    	}
    	if(gio>23)
    		gio%=24;
    }
    time time::operator ++()
    {
    	++giay;
    	this->settime();
    	return *this;
    }
    time time::operator ++(int)
    {
    	giay++;
    	this->settime();
    	return *this;
    }
    thanks bạn nha, để mình về chạy thử xem đúng chưa rồi pm lại nghen

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

  1. Bản chất của toán tử >> << và khả năng đa năng hóa >> << C++ (toán tử xuất nhập)
    Gửi bởi langman trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 05-03-2016, 11:46 PM
  2. năng lượng trong lĩnh vực Tiết kiệm năng lượng
    Gửi bởi zennery 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: 27-12-2013, 07:02 PM
  3. Trả lời: 0
    Bài viết cuối: 09-10-2012, 11:06 AM
  4. lệnh traloi=toupper((getch)) có chức năng gì trong hàm xóa trong danh sách liên kết?
    Gửi bởi nhoccon.uit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 24-04-2011, 10:04 AM
  5. C# | Chức năng Update phần mềm. Làm sao để viết chức năng này?
    Gửi bởi duckman trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 17-06-2009, 08:56 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