基于c++的运算符重载(二、数组非友元)

来源:互联网 发布:淘宝成功之处 编辑:程序博客网 时间:2024/06/05 20:04
using namespace std;
class MyArray
{
private:
 int *m_a;              //数组名
 int m_length;          //数组长度
public:
 MyArray(int l)         //构造函数不解释
 {
  m_length = l;
  m_a = new int[l];
 }
 MyArray(int *a, int l) //构造函数重载不解释
 {
  m_length = l;
  m_a = a;
 }
 void display()         //打印函数不解释
 {
  for(int i = 0; i < m_length; i++)
  {
   cout << m_a[i] << ",";
  }
  cout << endl;
 }
 MyArray * operator + (MyArray m2);  //数组+数组的重载
 MyArray * operator + (int a);       //数组+数的重载
 MyArray * operator - (MyArray m2);  //数组-数组的重载
 MyArray * operator = (MyArray m2);  //数组赋值的重载
 int operator * (MyArray m2);        //数组*数组没有实际作用
};
MyArray * MyArray::operator + (MyArray m2)  //返回值是一个指针指向数组
{
 MyArray *c = new MyArray(m_length);
 for(int i = 0; i < m_length; i++)
 {
  c -> m_a[i] = m_a[i] + m2.m_a[i];
 }
 return c;
}
MyArray * MyArray::operator + (int a)
{
 MyArray *c = new MyArray(m_length);
 for(int i = 0; i < m_length; i++)
 {
  c -> m_a[i] = m_a[i] + a;
 }
 return c;
}
MyArray * MyArray::operator - (MyArray m2)
{
 MyArray *c = new MyArray(m_length);
 for(int i = 0; i < m_length; i++)
 {
  c -> m_a[i] = m_a[i] - m2.m_a[i];
 }
 return c;
}
/*
MyArray * MyArray::operator = (MyArray m2)//返回的是(a = b)整个式子的值而不是a的值,a的值没有变(错)
{
 MyArray *a = new MyArray(m_length);
 for(int i = 0; i < m_length; i++)
 {
  a -> m_a[i] = m2.m_a[i];
 }
 return a;
}
*/
/*
MyArray MyArray::operator = (MyArray m2)
{
 MyArray a(m_length);              //返回的是(a = b)整个式子的值而不是a的值,a的值没有变(错)
 for(int i = 0; i < m2.m_length; i++)
 {
  a.m_a[i] = m2.m_a[i];
 }
 return a;
}
*/

MyArray * MyArray::operator = (MyArray m2)
{
 for(int i = 0; i < m_length; i++)
 {
  m_a[i] = m2.m_a[i];
 }
 return this;
}
int MyArray::operator * (MyArray m2)
{
 int sum = 0;
 for(int i = 0; i < m_length; i++)
 {
  sum += m_a[i] * m2.m_a[i];
 }
 return sum;
}
阅读全文
1 0
原创粉丝点击