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

Đề tài: Quá tải toán tử với array và vector trong lập trình C++!

  1. #1
    No Avatar
    becauseofyoublue Khách

    Angry Quá tải toán tử với array và vector trong lập trình C++!

    Đề bài như sau:
    Xây dựng lớp Array để lưu trữ một mảng số thực với các phương thức:
    - Các constructor: + Khởi tạo một mảng rỗng
    + Một mảng có n phần tử
    + Một mảng từ một mảng đã có
    Các destructor : hủy bỏ mảng của các đối tượng
    Các phép toán: +,- (cộng,trừ từng phần tử tương ứng), << , >>.

    Sau đó xây dựng lớp Vector để biểu diễn Vector được thừa kế từ lớp Array ở trên với các phép toán:
    - Các constructor: + Khởi tạo một Vector n chiều
    + Một Vector từ một Vector đã có
    - Destructor : hủy bỏ Vector
    - Các phép toán: + , – , << , >>.
    mình đã viết code như sau

    C++ Code:
    1. #include<conio.h>
    2. #include<iostream.h>
    3. #include<iomanip.h>
    4. #include<stdio.h>
    5.  
    6. class Array
    7. {
    8. protected:
    9.     int n;
    10.     float *val;
    11. public:
    12.     Array()
    13.     {
    14.        n=0;
    15.     }
    16.     Array(int m);
    17.     Array(const Array& b);
    18.     ~Array()
    19.     {
    20.        delete val;
    21.     }
    22.     friend istream& operator>>(istream& is,Array &a);
    23.     friend ostream& operator<<(ostream& os,Array &a);
    24.     virtual Array operator+(Array& b);
    25.     virtual Array operator-(Array& b);
    26. };
    27. //======Khoi tao mang co n phan tu==============
    28. Array::Array(int m)
    29. {
    30.    n=m;
    31.    val=new float[n];
    32. }
    33. //======Khoi tao 1 mang tu 1 mang da co=========
    34. Array::Array(const Array& b)
    35. {
    36.    this->n=b.n;
    37.    this->val=new float[n];
    38.    for(int i=0;i<this->n;i++)
    39.    {
    40.        this->val[i]=b.val[i];
    41.    }
    42. }
    43. //=======Ham da nang toan tu nhap============
    44. istream& operator>>(istream& is,Array& a)
    45. {
    46.    cout<<"\nArray "<<a.n<<"phan tu!";
    47.    for(int i=0;i<a.n;i++)
    48.    {
    49.        cout<<"\nNhap phan tu thu "<<i+1<<":";
    50.        is>>a.val[i];
    51.    }
    52.    return is;
    53. }
    54. //=======Ham da nang toan tu xuat============
    55. ostream& operator<<(ostream& os,Array& a)
    56. {
    57.    for(int i=0;i<a.n;i++)
    58.    {
    59.      os<<setw(6)<<setprecision(1)<<a.val[i];/*
    60.        <<setioflags (ios::fixed)
    61.        <<setiosflag (ios::showpoint)<<a.val[i];*/
    62.       // printf("%6.3f",a.val[i]);
    63.    }
    64.    return os;
    65. }
    66. //======Ham cong mang===================
    67. Array Array::operator+(Array& b)
    68. {
    69.    if(n!=b.n)
    70.    {
    71.       cout<<"\nHai Array co size khac nhau";
    72.       cout<<"\nTra ve Array:";
    73.       return *this;
    74.    }
    75.    else
    76.    {
    77.        Array kq;
    78.        kq.n=n;
    79.        kq.val=new float[kq.n];
    80.        for(int i=0;i<kq.n;i++)
    81.        {
    82.       kq.val[i]=val[i]+b.val[i];
    83.        }
    84.        return kq;
    85.    }
    86. }
    87. //=========Hieu hai Array=====================
    88. Array Array::operator-(Array& b)
    89. {
    90.    if(n!=b.n)
    91.    {
    92.       cout<<"\nHai Array co size khac nhau";
    93.       cout<<"\nTra ve Array:";
    94.       return *this;
    95.    }
    96.    else
    97.    {
    98.        Array kq;
    99.        kq.n=n;
    100.        kq.val=new float[kq.n];
    101.        for(int i=0;i<kq.n;i++)
    102.        {
    103.       kq.val[i]=val[i]-b.val[i];
    104.        }
    105.        return kq;
    106.    }
    107. }
    108. /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
    109. class Vector:public Array
    110. {
    111. public:
    112.     Vector()
    113.     {
    114.        n=0;
    115.     }
    116.     Vector(int m);
    117.     Vector(Vector& v);
    118.     ~Vector()
    119.     {
    120.        delete val;
    121.     }
    122.     friend istream& operator>>(istream& is,Vector &vt);
    123.     friend ostream& operator<<(ostream& os,Vector &vt);
    124.     Vector operator+(Vector& b);
    125.     //Vector operator-(Vector& b);
    126.  
    127.  
    128. };
    129. //&&&&&&_Ham khoi tao Vector n chieu_&&&&&&&&&&&
    130. Vector::Vector(int schieu)//:Array(int m)
    131. {
    132.    n=schieu;
    133.    val=new float[n];
    134. }
    135. //$$$$$$_Ham khoi tao Vector tu mot Vector da co_&&&&&
    136. Vector::Vector(Vector& v)
    137. {
    138.    this->val=new float[this->n=v.n];
    139.    for(int i=0;i<this->n;i++)
    140.      this->val[i]=v.val[i];
    141. }
    142. //#$$$$_Ham da nang toan tu nhap_$$$$$$$$$$$
    143. istream& operator>>(istream& is,Vector& vt)
    144. {
    145.    cout<<"\nSo chieu cua Vector la:"<<vt.n;
    146.    for(int i=0;i<vt.n;i++)
    147.    {
    148.       cout<<"\nChieu thu "<<i+1<<": ";
    149.       is>>vt.val[i];
    150.    }
    151.    return is;
    152. }
    153. //$$$$$_Ham da nang toan tu xuat_$$$$$$$$$$$
    154. ostream& operator<<(ostream& os,Vector& vt)
    155. {
    156.    os<<"\n(";
    157.    for(int i=0;i<vt.n;i++)
    158.    {
    159.       os<<vt.val[i]<<", ";
    160.    }
    161.    os<<")";
    162.    return os;
    163. }
    164. //$$$$$$$$_Ham cong hai Vector_$$$$$$$$$$$
    165. Vector Vector::operator+(Vector& b)
    166. {
    167.      cout<<"\nVector tong :";
    168.      Array::operator+(b);
    169.      return ?????;
    170. }
    171. //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//
    172. void main()
    173. {
    174.    clrscr();
    175.   /* Array a(4);
    176.    Array b=a,c,d;
    177.    cout<<"\nNhap Array thu nhat:";  cin>>a;
    178.    cout<<"\nArray thu nhat la:"; cout<<a;
    179.  
    180.    cout<<"\nArray thu hai duoc khoi tao tu Array thu nhat la:";
    181.    cout<<(b=a);
    182.  
    183.    Array a(4),b(4),c,d;
    184.    cout<<"\nNhap Array thu nhat:";  cin>>a;
    185.    cout<<"\nArray thu nhat la:"; cout<<a;
    186.    cout<<"\nNhap Array thu hai:";  cin>>b;
    187.    cout<<"\nArray thu hai la:"; cout<<b;
    188.  
    189.    c=a+b;
    190.    cout<<"\nGia tri Array tong:";  cout<<c;
    191.  
    192.    d=a-b;
    193.    cout<<"\n\nGia tri Array hieu:";  cout<<d;*/
    194.  
    195.    ///////////////////////////////////////
    196.    Vector vt(3);
    197.    cout<<"\nNhap Vector thu nhat:";  cin>>vt;
    198.    cout<<"\nVector da  nhap la:";  cout<<vt;
    199.  
    200.    getch();
    201. }

    giúp mình viết hàm +,- hai vector được kế thừa từ class Aray trên
    Đã được chỉnh sửa lần cuối bởi becauseofyoublue : 22-04-2008 lúc 07:58 AM. Lý do: nói thêm

  2. #2
    No Avatar
    becauseofyoublue Khách

    Trích dẫn Nguyên bản được gửi bởi becauseofyoublue Xem bài viết
    Đề bài như sau:
    Xây dựng lớp Array để lưu trữ một mảng số thực với các phương thức:
    - Các constructor: + Khởi tạo một mảng rỗng
    + Một mảng có n phần tử
    + Một mảng từ một mảng đã có
    Các destructor : hủy bỏ mảng của các đối tượng
    Các phép toán: +,- (cộng,trừ từng phần tử tương ứng), << , >>.

    Sau đó xây dựng lớp Vector để biểu diễn Vector được thừa kế từ lớp Array ở trên với các phép toán:
    - Các constructor: + Khởi tạo một Vector n chiều
    + Một Vector từ một Vector đã có
    - Destructor : hủy bỏ Vector
    - Các phép toán: + , – , << , >>.
    mình đã viết code như sau

    C++ Code:
    1. #include<conio.h>
    2. #include<iostream.h>
    3. #include<iomanip.h>
    4. #include<stdio.h>
    5.  
    6. class Array
    7. {
    8. protected:
    9.     int n;
    10.     float *val;
    11. public:
    12.     Array()
    13.     {
    14.        n=0;
    15.     }
    16.     Array(int m);
    17.     Array(const Array& b);
    18.     ~Array()
    19.     {
    20.        delete val;
    21.     }
    22.     friend istream& operator>>(istream& is,Array &a);
    23.     friend ostream& operator<<(ostream& os,Array &a);
    24.     virtual Array operator+(Array& b);
    25.     virtual Array operator-(Array& b);
    26. };
    27. //======Khoi tao mang co n phan tu==============
    28. Array::Array(int m)
    29. {
    30.    n=m;
    31.    val=new float[n];
    32. }
    33. //======Khoi tao 1 mang tu 1 mang da co=========
    34. Array::Array(const Array& b)
    35. {
    36.    this->n=b.n;
    37.    this->val=new float[n];
    38.    for(int i=0;i<this->n;i++)
    39.    {
    40.        this->val[i]=b.val[i];
    41.    }
    42. }
    43. //=======Ham da nang toan tu nhap============
    44. istream& operator>>(istream& is,Array& a)
    45. {
    46.    cout<<"\nArray "<<a.n<<"phan tu!";
    47.    for(int i=0;i<a.n;i++)
    48.    {
    49.        cout<<"\nNhap phan tu thu "<<i+1<<":";
    50.        is>>a.val[i];
    51.    }
    52.    return is;
    53. }
    54. //=======Ham da nang toan tu xuat============
    55. ostream& operator<<(ostream& os,Array& a)
    56. {
    57.    for(int i=0;i<a.n;i++)
    58.    {
    59.      os<<setw(6)<<setprecision(1)<<a.val[i];/*
    60.        <<setioflags (ios::fixed)
    61.        <<setiosflag (ios::showpoint)<<a.val[i];*/
    62.       // printf("%6.3f",a.val[i]);
    63.    }
    64.    return os;
    65. }
    66. //======Ham cong mang===================
    67. Array Array::operator+(Array& b)
    68. {
    69.    if(n!=b.n)
    70.    {
    71.       cout<<"\nHai Array co size khac nhau";
    72.       cout<<"\nTra ve Array:";
    73.       return *this;
    74.    }
    75.    else
    76.    {
    77.        Array kq;
    78.        kq.n=n;
    79.        kq.val=new float[kq.n];
    80.        for(int i=0;i<kq.n;i++)
    81.        {
    82.       kq.val[i]=val[i]+b.val[i];
    83.        }
    84.        return kq;
    85.    }
    86. }
    87. //=========Hieu hai Array=====================
    88. Array Array::operator-(Array& b)
    89. {
    90.    if(n!=b.n)
    91.    {
    92.       cout<<"\nHai Array co size khac nhau";
    93.       cout<<"\nTra ve Array:";
    94.       return *this;
    95.    }
    96.    else
    97.    {
    98.        Array kq;
    99.        kq.n=n;
    100.        kq.val=new float[kq.n];
    101.        for(int i=0;i<kq.n;i++)
    102.        {
    103.       kq.val[i]=val[i]-b.val[i];
    104.        }
    105.        return kq;
    106.    }
    107. }
    108. /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
    109. class Vector:public Array
    110. {
    111. public:
    112.     Vector()
    113.     {
    114.        n=0;
    115.     }
    116.     Vector(int m);
    117.     Vector(Vector& v);
    118.     ~Vector()
    119.     {
    120.        delete val;
    121.     }
    122.     friend istream& operator>>(istream& is,Vector &vt);
    123.     friend ostream& operator<<(ostream& os,Vector &vt);
    124.     Vector operator+(Vector& b);
    125.     //Vector operator-(Vector& b);
    126.  
    127.  
    128. };
    129. //&&&&&&_Ham khoi tao Vector n chieu_&&&&&&&&&&&
    130. Vector::Vector(int schieu)//:Array(int m)
    131. {
    132.    n=schieu;
    133.    val=new float[n];
    134. }
    135. //$$$$$$_Ham khoi tao Vector tu mot Vector da co_&&&&&
    136. Vector::Vector(Vector& v)
    137. {
    138.    this->val=new float[this->n=v.n];
    139.    for(int i=0;i<this->n;i++)
    140.      this->val[i]=v.val[i];
    141. }
    142. //#$$$$_Ham da nang toan tu nhap_$$$$$$$$$$$
    143. istream& operator>>(istream& is,Vector& vt)
    144. {
    145.    cout<<"\nSo chieu cua Vector la:"<<vt.n;
    146.    for(int i=0;i<vt.n;i++)
    147.    {
    148.       cout<<"\nChieu thu "<<i+1<<": ";
    149.       is>>vt.val[i];
    150.    }
    151.    return is;
    152. }
    153. //$$$$$_Ham da nang toan tu xuat_$$$$$$$$$$$
    154. ostream& operator<<(ostream& os,Vector& vt)
    155. {
    156.    os<<"\n(";
    157.    for(int i=0;i<vt.n;i++)
    158.    {
    159.       os<<vt.val[i]<<", ";
    160.    }
    161.    os<<")";
    162.    return os;
    163. }
    164. //$$$$$$$$_Ham cong hai Vector_$$$$$$$$$$$
    165. Vector Vector::operator+(Vector& b)
    166. {
    167.      cout<<"\nVector tong :";
    168.      Array::operator+(b);
    169.      return ?????;
    170. }
    171. //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//
    172. void main()
    173. {
    174.    clrscr();
    175.   /* Array a(4);
    176.    Array b=a,c,d;
    177.    cout<<"\nNhap Array thu nhat:";  cin>>a;
    178.    cout<<"\nArray thu nhat la:"; cout<<a;
    179.  
    180.    cout<<"\nArray thu hai duoc khoi tao tu Array thu nhat la:";
    181.    cout<<(b=a);
    182.  
    183.    Array a(4),b(4),c,d;
    184.    cout<<"\nNhap Array thu nhat:";  cin>>a;
    185.    cout<<"\nArray thu nhat la:"; cout<<a;
    186.    cout<<"\nNhap Array thu hai:";  cin>>b;
    187.    cout<<"\nArray thu hai la:"; cout<<b;
    188.  
    189.    c=a+b;
    190.    cout<<"\nGia tri Array tong:";  cout<<c;
    191.  
    192.    d=a-b;
    193.    cout<<"\n\nGia tri Array hieu:";  cout<<d;*/
    194.  
    195.    ///////////////////////////////////////
    196.    Vector vt(3);
    197.    cout<<"\nNhap Vector thu nhat:";  cin>>vt;
    198.    cout<<"\nVector da  nhap la:";  cout<<vt;
    199.  
    200.    getch();
    201. }

    giúp mình viết hàm +,- hai vector được kế thừa từ class Aray trên
    Mình định dùng hàm mẫu nhưng không có tài liệu nào nói về việc sử dụng Template trong kế thừa.Mình sử dụng con trỏ đối tượng.Bạn nào có ý tưởng gì không????

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

    Sử dụng kế thừa không rõ ràng, vector không có data, kế thừa kiểu này hoàn toàn không có ý nghĩa gì hết.
    Mình định dùng hàm mẫu nhưng không có tài liệu nào nói về việc sử dụng Template trong kế thừa.
    Cậu viết được generic template đã rùi học cái này sau. Syntax nó rất khó chịu và cả khi complier generate errors tui đọc cũng không nổi, cậu viết C++ chưa quen đọc rất dễ freak out, nên tui nghĩ khoang hãy nghĩ đến idea này, nếu cần thì tui sẽ cho ví dụ.
    Về bài này tui đã đọc hôm qua, nhưng tui không rõ cậu làm cái gì vì array kế thừa vector nhìn rất kì cục, implement lại dùng template <> tui sẽ coi cho

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

    Đây tui viết lại template, và tui nghĩ cách này thì rõ ràng hơn, class array là thuộc tính của class vector, cậu quá tải toán tử trên lớp vector, tuy nhiên tui không hiểu phép + 2 vector mà lỡ size nó khác nhau thì sao ? Cậu muốn trả về size lớn hơn hay nhỏ hơn, hay là.... Cho tui biết tui sẽ viết cho ví dụ toán tử +.
    array
    C++ Code:
    1. #include <iostream>
    2. const int DEFAULT_SIZE = 5;
    3.  
    4. template <typename T>
    5. class array
    6. {
    7. private :
    8.   int a_size;
    9.   T* data;
    10. public :
    11.   array():a_size(DEFAULT_SIZE){
    12.   }
    13.   array(int a_size);
    14.   array(const array<T>& );
    15.   ~array();
    16.   array& operator=(const array<T>& );
    17.   int size() const;
    18.   T* get_data() const;
    19.   void resize(int );
    20.   T& operator[](int );
    21.   const T& operator[](int ) const;
    22.   std::ostream& output(std::ostream& os) const;
    23.   std::istream& input(std::istream& os);
    24. };

    array
    C++ Code:
    1. template <typename T>
    2. std::ostream& array<T>::output(std::ostream& os) const
    3. {
    4.   for(int x = 0; x < a_size; ++x)
    5.     os << data[x] << " ";
    6.   return os;
    7. }
    8.  
    9. template <typename T>
    10. std::istream& array<T>::input(std::istream& is)
    11. {
    12.   is >> a_size;
    13.   for(int x = 0; x < a_size; ++x)
    14.     is >> data[x];
    15.   return is;
    16. }
    17.  
    18. template<typename T>
    19. array<T>::array(const array<T>& rhs){
    20.   *this = rhs;
    21. }
    22.  
    23. template<typename T>
    24. array<T>::array(int a_size)
    25.   :a_size(a_size), data(new T[a_size])
    26. {
    27. }
    28.  
    29. template<typename T>
    30. array<T>::~array()
    31. {
    32.   delete[] data;
    33. }
    34.  
    35. template<typename T>
    36. T* array<T>::get_data()const
    37. {
    38.   return data;
    39. }
    40.  
    41. template <typename T>
    42. array<T>& array<T>::operator=(const array<T> &rhs)
    43. {
    44.   resize(rhs.a_size);
    45.   for (int x = 0; x < a_size; ++x)
    46.     data[x] = rhs[x];
    47.   return *this;
    48. }
    49.  
    50. template <typename T>
    51. void array<T>::resize(int n_size)
    52. {
    53.   if(n_size == a_size)
    54.     return;
    55.   T *arry = new T[n_size];
    56.   if(n_size < a_size){
    57.     for(int x = 0; x < n_size; ++x)
    58.       arry[x] = data[x];
    59.   }
    60.   else if(n_size > a_size){
    61.     for(int x = 0; x < n_size; ++x)
    62.       arry[x] = x < a_size ? data[x] : T();
    63.   }
    64.   delete[] data;
    65.   data = arry;
    66.   a_size = n_size;
    67. }
    68.  
    69. template <typename T>
    70. T& array<T>::operator[](int position)
    71. {
    72.   if((position + 1) > a_size)
    73.     resize(a_size * 2);
    74.   return data[position];
    75. }
    76.  
    77. template <typename T>
    78. const T& array<T>::operator[](int position) const
    79. {
    80.   assert(position < a_size);
    81.   return data[position];
    82. }
    83.  
    84. template <typename T>
    85. int array<T>::size() const
    86. {
    87.   return a_size;
    88. }
    89.  
    90. template <typename T>
    91. std::ostream& operator << (std::ostream& os, const array<T>& a)
    92. {
    93.   a.output(os);
    94.   return os;
    95. }
    96.  
    97. template <typename T>
    98. std::istream& operator >> (std::istream& is, array<T>& a)
    99. {
    100.   a.input(is);
    101.   return is;
    102. }

    Vector implement sẽ dễ dàng hơn rất nhiều nó có hẳn trong đó 1 array<int> hay array<double> là tuỳ cậu.

    vector
    C++ Code:
    1. class vector
    2. {
    3. private :
    4.   array<int> vect;
    5. public :
    6.   vector():vect(5){
    7.   }
    8.   vector(const vector& rhs):vect(rhs.vect){
    9.   }
    10.   vector& operator = (const vector& rhs){
    11.     vect = rhs.vect;
    12.     return *this;
    13.   }
    14.   std::ostream& output(std::ostream& os) const;
    15.   std::istream& input(std::istream& os);
    16. };
    17.  
    18. std::istream& vector::input(std::istream& is){
    19.   is >> vect;
    20.   return is;
    21. }
    22.  
    23. std::ostream& vector::output(std::ostream& os) const{
    24.   os << vect;
    25.   return os;
    26. }
    27.  
    28. std::ostream& operator << (std::ostream& os, const vector& rhs){
    29.   rhs.output(os);
    30.   return os;
    31. }
    32.  
    33. std::istream& operator >> (std::istream& is, vector& rhs){
    34.   rhs.input(is);
    35.   return is;
    36. }

  5. #5
    No Avatar
    becauseofyoublue Khách

    THanks nhìu ha
    Ở đây mình muốn viết hàm cộng hai vector cung size thôi.khác size mình đã xử lí được rùi.
    trong bài mình viết :class Vector được kế thừa từ class Array thi Vector của mình đã có các thuộc tính của Array như :n(size) và *val(value).Với lại mình để hai thuộc tính đó là protected nên Vector của mình vẫn sử dụng được mà.
    Điều wan trọng là hàm cộng hai Vector phải được kế thừa từ Hàm cộng hai Array cùng cấp .


    Mình đang chuyển sang dùng con trỏ đối tượng lớp cơ sở hông bít có được không nữa???

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

  1. lỗi no matching function for call to `vector::vector(vector)'
    Gửi bởi ngonchanloi89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-11-2013, 11:25 AM
  2. Trả lời: 6
    Bài viết cuối: 05-01-2011, 06:33 PM
  3. Array Kiểu VECTOR error C2679: binary '<<' : no operator found
    Gửi bởi nndung179 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: 18-11-2010, 02:58 PM
  4. vector trong lập trình OOP là gì? vector trên C++ là gì?
    Gửi bởi tunglong123 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 01-05-2009, 12:03 AM
  5. Tại Sao Array=vector
    Gửi bởi phstiger trong diễn đàn Thắc mắc chung
    Trả lời: 6
    Bài viết cuối: 13-04-2008, 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