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

Đề tài: [ Solved ]Toán tử cộng và kế thừa

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

    Mặc định [ Solved ]Toán tử cộng và kế thừa

    Ở trường có giao một bài tập sau đây: Cho 2 lớp sau:
    C++ Code:
    1. class PHANSO
    2. {
    3. private:
    4.     int Tu, Mau;
    5. public:
    6.     // các phương thức cần viết
    7. };
    8. class SONGUYEN: public PHANSO
    9. {
    10. private:
    11.     // không được khai báo thêm biến
    12. public:
    13.     // các phương thức cần viết
    14. };
    Thêm vào các phương thức cần thiết để thực hiện được các phép toán dưới đây:
    C++ Code:
    1. int main()
    2. {
    3.     PHANSO a, b(5), c(6,7);
    4.     SONGUYEN x, y(2), z = 3;
    5.  
    6.     cout << "b = " << b << endl;
    7.     cout << "c = " << c << endl;
    8.     cout << "y = " << y << endl;
    9.     cout << "z = " << z << endl;
    10.  
    11.     a = b + c; cout << "a = b + c = " << a << endl;     // 1
    12.     a = b + z; cout << "a = b + z = " << a << endl;     // 2
    13.     a = z + b; cout << "a = z + b = " << a << endl;     // 3
    14.  
    15.     x = b + c; cout << "x = b + c = " << x << endl;     // 4
    16.     x = b + z; cout << "x = b + z = " << x << endl;     // 5
    17.     x = z + b; cout << "x = z + b = " << x << endl;     // 6
    18.  
    19.     a = b + 9; cout << "a = b + 9 = " << a << endl;     // 7
    20.     a = 9 + b; cout << "a = 9 + b = " << a << endl;     // 8
    21.  
    22.     a = z + 9; cout << "a = z + 9 = " << a << endl;     // 9
    23.     a = 9 + z; cout << "a = 9 + z = " << a << endl;     // 10
    24.  
    25.     x = b + 9; cout << "x = b + 9 = " << x << endl;     // 11
    26.     x = 9 + b; cout << "x = 9 + b = " << x << endl;     // 12
    27.  
    28.     x = z + 9; cout << "x = z + 9 = " << x << endl;     // 13
    29.     x = 9 + z; cout << "x = 9 + z = " << x << endl;     // 14
    30.  
    31.     a = 9 + 8; cout << "a = 9 + 8 = " << a << endl;     // 15
    32.     x = 9 + 8; cout << "x = 9 + 8 = " << x << endl;     // 16
    33.  
    34.     return 0;
    35. }

    Nhìn vào bài mà đã thấy choáng rồi. Sau đây là giải pháp của mình:
    [FIXED]
    - Để thực hiện được các phép tính 1, 2, 3, 7, 8, 9, 10, 15, 16, mình viết hàm sau:
    C++ Code:
    1. PHANSO operator + (const PHANSO &a, const PHANSO &b)
    2. {
    3.     int t = a.Tu*b.Mau + b.Tu*a.Mau;
    4.     int m = a.Mau * b.Mau;
    5.     return PHANSO(t, m);
    6. }
    - Để thực hiện tính toán được trên SONGUYEN, mình viết một phương thức protected trong lớp PHANSO để trả về giá trị của tử số của phân số đó. (vì theo đề bài yêu cầu thì khi cộng một phân số với một số nguyên đi nữa thì phân số đều có mẫu bằng 1 )
    C++ Code:
    1. int PHANSO::getTu () const
    2. {
    3.     return this->Tu;
    4. }
    - Tiếp đến mình viết phương thức sau đây trong lớp SONGUYEN:
    C++ Code:
    1. SONGUYEN operator + (const SONGUYEN &a, const SONGUYEN &b)
    2. {
    3.     return SONGUYEN(a.getTu() + b.getTu());
    4. }
    5.  => thực hiện được hai phép toán 13, 14
    [/FIXED]
    Vấn đề là bây giờ các phép toán còn lại mình không biết phải làm sao hết??? Mình thấy đề bài này ra giống đánh đố học sinh quá, nhưng mình cũng muốn làm cho được. Bạn nào có quan tâm thì giúp giùm mình với. Xem thêm chi tiết ở tạp tin đính kèm.
    Attached Files Attached Files

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

    Chờ mãi mà sao không ai giải đáp giúp mình hết vậy??? Mình nói cho rõ hơn nữa là mình không biết cách thực hiện các phép toán sau:
    - Phép cộng hai phân số trả về một số nguyên (hơi kì cục ha)
    - Cộng một phân số với một số nguyên trả về một số nguyên.
    Mình muốn hỏi thêm câu nữa là ta có thể viết một phương thức chuyển từ PHANSO qua SONGUYEN và ngược lại không?

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

    Mình muốn hỏi thêm câu nữa là ta có thể viết một phương thức chuyển từ PHANSO qua SONGUYEN và ngược lại không?
    Chuyển từ số nguyên sang phân số thì nghe ok, chứ phân số thành số nguyên thì làm sao mà chuyển được ?
    Dùng conversion operator là ok, ví dụ đây :
    C++ Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. class Fract {
    6. protected :
    7.     int n;
    8. private :
    9.     int d;
    10. public :
    11.     Fract( int n = 0, int d = 0 ):n( n ), d( d ) {
    12.     }
    13.     friend ostream& operator <<( ostream& o, const Fract& f ) {
    14.         return o << f.n << "/" << f.d << "\n";
    15.     }
    16. };
    17.  
    18. class Integer : public Fract {
    19. public :
    20.     Integer( int n = 0 ):Fract( n, 1 ) {
    21.     }
    22.     operator Fract() const {
    23.         return Fract( n, 1 );
    24.     }
    25.     friend ostream& operator <<( ostream& o, const Integer& i ) {
    26.         return o << i.n << "\n";
    27.     }
    28. };
    29.  
    30. int main()
    31. {
    32.     Integer i( 10 );
    33.     Fract f;
    34.     f = static_cast< Fract >( i );
    35.     cout << f << "\n";
    36. }
    Phép + - gì gì đó thì đọc kĩ lý thuyết là làm được, chẳng có gì khó hết.
    Đoạn dấu + của cậu không cần dùng thêm 2 biến làm gì, dùng thế này tăng performance "Base initializer"
    C++ Code:
    1. PHANSO operator +( const PHANSO &a, const PHANSO &b )
    2. {
    3.     return PHANSO( a.Tu*b.Mau + b.Tu*aMau, a.Mau * b.Mau );
    4. }

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

  1. [ Solved ]Xây dựng lớp ĐỒTHI
    Gửi bởi bluesky_123078 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: 09-11-2008, 09:34 AM
  2. [Solved] Hỏi về con trỏ
    Gửi bởi RedHatLinux9 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 17-09-2008, 08:01 AM
  3. [ Solved ]Cấp phát động
    Gửi bởi demontaihack trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 07-09-2008, 08:23 PM
  4. [ Solved ]Cần hướng dẫn về bài tập màng!!
    Gửi bởi itthuyloi 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-06-2008, 03:00 PM
  5. [ Solved ]Sắp xếp hai dãy số
    Gửi bởi thuchanh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 20-04-2008, 11:47 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