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

Đề tài: Vấn đề với method khởi tạo

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

    Mặc định Vấn đề với method khởi tạo

    Mình có đoạn code thế này :
    C++ Code:
    1. class Da_thuc
    2.   {
    3.     private:
    4.       int bac;
    5.         float hs[10];
    6.        public:
    7.              int get_deg();
    8.              Da_thuc (float init[], int deg);
    9.              Da_thuc ();
    10.              Da_thuc Tong (Da_thuc a);
    11.              Da_thuc Nhan (Da_thuc a);
    12.              void Hien_thi(Da_thuc a);
    13.              Da_thuc Nhan_num (float c);    
    14.              
    15.     };  
    16.  
    17.  
    18. Đây là method có vấn đề
    19.  
    20. Da_thuc :: Da_thuc(float init[], int deg)
    21.             {  int i;
    22.            
    23.              for (i = 0; i <= deg; i++) {
    24.                hs[i] = init[i];
    25.                  }
    26.               for(; i < 10; i++) {
    27.                   hs[i] = 0;
    28.               }
    29.         };
    mình khai báo một mảng các ptử có kiểu đa thức rồi khởi tạo nó
    C++ Code:
    1.  Da_thuc dt[10];
    2. ...
    3.  float x[2];
    4. for (int i=0;i<so_luong;i++)
    5.      {  
    6.          x[0]=data[i];
    7.          x[1]=1;
    8.          dt[i] (x,1);
    9.       }

    Tới đây thì báo lỗi 305 no match for call to `(Da_thuc) (float[2], int)'
    Chả hiểu thế nào nữa, giúp mình với .

    Lưu ý bỏ code vào thẻ code

    }
    Đã được chỉnh sửa lần cuối bởi rox_rook : 12-05-2008 lúc 04:13 PM.

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    483

    Trích dẫn Nguyên bản được gửi bởi chmod Xem bài viết
    mình khai báo một mảng các ptử có kiểu đa thức rồi khởi tạo nó
    Da_thuc dt[10]; // 1
    ...
    float x[2];
    for (int i=0;i<so_luong;i++)
    {
    x[0]=data[i];
    x[1]=1;
    dt[i] (x,1); // 2
    }


    Tới đây thì báo lỗi 305 no match for call to `(Da_thuc) (float[2], int)'
    Chả hiểu thế nào nữa, giúp mình với .


    }
    Việc khởi tạo bằng default constructor Da_thuc(void) đã được thi hành ở dòng // 1 rồi. Còn dòng //2 gọi toán tử hàm ( operator()(float[], int) ) chứ không gọi constructor Dathuc(float[], int)) như bạn muốn đâu.

    Bạn có thể viết toán tử hàm để tính giá trị đa thức. Ví dụ, float operator()(float) dùng tính giá trị đa thức 1 biến và float operator()(float, float) dùng để tính giá trị đa thức 2 biến, đại loại thế này:
    Code:
    Da_thuc f1(...);
    Da_thuc f2(...);
    float x = f1(1.414);
    float y = f2(3.14, x+1);

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

    Hì, thank bạn.
    Mình sơ suất thật. Nhưng cách sử lý của mình thì hơi khác
    C++ Code:
    1.  for (int i=0;i<so_luong;i++)
    2.      {  x[0]=data[i].x;
    3.            x[1]=1;
    4.           Da_thuc temp (x,1);
    5.           dt[i]=temp;
    6.        }
    Thế này liệu có hậu họa j ko nhỉ
    Đã được chỉnh sửa lần cuối bởi rox_rook : 12-05-2008 lúc 04:14 PM.

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    483

    Trích dẫn Nguyên bản được gửi bởi chmod Xem bài viết
    Thế này liệu có hậu họa j ko nhỉ
    Hậu họa thì không có. Nhưng nó sẽ sao chép số liệu từ data qua biến trung gian (temp) để vào dt[i] nên sẽ hiệu quả sẽ giảm đi 1 nửa.

    Nếu là mình, mình sẽ viết một method (không khởi tạo) để thực hiện việc sao chép thẳng từ data vào dt[i], tránh phải qua trung gian.

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

    Nếu muốn quá tải toán tử kiểu này thì dùng template code sẽ sáng hơn rất nhiều, thay vì phải quá tải cho 1 đống method con như thế. Đây là ví dụ, cậu coi đó rùi viết lại cho lớp của cậu :
    C++ Code:
    1. #include <iostream>
    2. #include <cassert>
    3.  
    4. using std::cout;
    5.  
    6. template< typename T >
    7. class Array
    8. {
    9. public :
    10.     explicit Array( size_t s )
    11.         :storage( new T[ s ] ), storage_size( s )
    12.     {
    13.         initialize();
    14.     }
    15.  
    16.     Array( Array< T > const& orgi )
    17.         :storage( new T[ orgi.size() ] ), storage_size( orgi.size() )
    18.     {
    19.         copy( orgi );
    20.     }
    21.  
    22.     ~Array()
    23.     {
    24.         delete[] storage;
    25.     }
    26.  
    27.     Array< T >& operator =( Array< T > const& orgi )
    28.     {
    29.         if( &orgi != this )
    30.         {
    31.             copy( orgi );
    32.         }
    33.         return *this;
    34.     }
    35.  
    36.     size_t size() const
    37.     {
    38.         return storage_size;
    39.     }
    40.  
    41.     T operator []( size_t g ) const
    42.     {
    43.         return storage[g];
    44.     }
    45.  
    46.     T& operator []( size_t g )
    47.     {
    48.         return storage[ g ];
    49.     }
    50.  
    51. protected :
    52.     void initialize()
    53.     {
    54.         for( size_t g = 0; g < size(); ++g )
    55.         {
    56.             storage[ g ] = T();
    57.         }
    58.     }
    59.  
    60.     void copy( Array< T > const& orgi )
    61.     {
    62.         assert( size() == orgi.size() );
    63.         for( size_t g = 0; g < size(); ++g )
    64.         {
    65.             storage[ g ] = orgi.storage[ g ];
    66.         }
    67.     }
    68.  
    69. private :
    70.     T* storage;
    71.     size_t storage_size;
    72. };
    73.  
    74. template< typename T >
    75. Array< T > operator +( Array< T > const& lhs, Array< T > const& rhs)
    76. {
    77.     Array< T > result( lhs.size() );
    78.     for( size_t g = 0; g < lhs.size(); ++g )
    79.     {
    80.         result[g] = lhs[ g ] + rhs[ g ];
    81.     }
    82.     return result;
    83. }
    84.  
    85. template< typename T >
    86. Array< T > operator -( Array< T > const& lhs, Array< T > const& rhs)
    87. {
    88.     Array< T > result( lhs.size() );
    89.     for( size_t g = 0; g < lhs.size(); ++g )
    90.     {
    91.         result[ g ] = lhs[ g ] - rhs[ g ];
    92.     }
    93.     return result;
    94. }
    95.  
    96. template< typename T >
    97. Array< T > operator *( Array< T > const& lhs, Array< T > const& rhs)
    98. {
    99.     Array< T > result( lhs.size() );
    100.     for( size_t g = 0; g < lhs.size(); ++g )
    101.     {
    102.         result[ g ] = lhs[ g ] * rhs[ g ];
    103.     }
    104.     return result;
    105. }
    106.  
    107. template< typename T >
    108. Array< T > operator *( T const& val, Array< T > const& rhs)
    109. {
    110.     Array< T > result( rhs.size() );
    111.     for( size_t g = 0; g < rhs.size(); ++g )
    112.     {
    113.         result[ g ] = val * rhs[ g ];
    114.     }
    115.     return result;
    116. }
    117.  
    118. template< typename T >
    119. void assign_value( Array< T >& v, T val)
    120. {
    121.     for( int g = 0; g < v.size(); ++g )
    122.     {
    123.         v[ g ] = val;
    124.     }
    125. }
    126.  
    127. template< typename T >
    128. void print_array( Array< T > const& v )
    129. {
    130.     for( int g = 0; g < v.size(); ++g )
    131.     {
    132.         cout << v[ g ] << "->";
    133.     }
    134.     cout << "\n";
    135. }
    136.  
    137.  
    138. int main()
    139. {
    140.     Array< double > first( 10 ),
    141.                     second( 10 );
    142.  
    143.     assign_value( first, 3.3 );
    144.     assign_value( second, 4.4 );
    145.  
    146.     /*
    147.         - print content of 2 arrays before do some operations
    148.     */
    149.     print_array( first );
    150.     print_array( second );
    151.  
    152.     first = 0.5 * first + first * second;
    153.  
    154.     /*
    155.         - show the content of first
    156.     */
    157.     print_array( first );
    158.  
    159.     return 0;
    160. }

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

  1. Instance method và class method khác nhau như thế nào?
    Gửi bởi zenstorm trong diễn đàn Thắc mắc lập trình Objective-C
    Trả lời: 4
    Bài viết cuối: 24-02-2012, 09:36 AM
  2. C# 3 – Tìm hiểu về Extension Method
    Gửi bởi Yin Yang trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 03-07-2011, 08:06 PM
  3. Method SendMessage của thư viện user32.dll?
    Gửi bởi trung135 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 03-02-2011, 10:55 PM
  4. factory method
    Gửi bởi cuopbien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 20-12-2008, 12:10 AM
  5. về template method cua C++!
    Gửi bởi hackid_nguyenthevu trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 20-12-2007, 06:09 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