欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

小白一个,关于运算符重载,请老师给诠释一下

更新时间: 2014-01-19 02:34:15 责任编辑: Author_N1

 

小白一个,关于运算符重载,请老师给注释一下。
我知道很基础但是感觉进步好慢啊!还请请不吝赐教
#include <iostream>
#include<stdlib.h>
using namespace std;

class Integer {
  int i;
public:
  Integer(int ii) : i(ii) {}
  const Integer
  operator+(const Integer& rv) const {
    cout << "operator+" << endl;
    return Integer(i + rv.i);
  }
  Integer&
  operator+=(const Integer& rv) {
    cout << "operator+=" << endl;
    i += rv.i;
    return *this;
  }
};

int main() {
  cout << "built-in types:" << endl;
  int i = 1, j = 2, k = 3;
  k += i + j;
  cout << "user-defined types:" << endl;
  Integer ii(1), jj(2), kk(3);
  kk += ii + jj;
  system("pause");
  return 0;
} ///:~

--参考方法--
哪里有问题?

class Integer {
  int i;
public:
  Integer(int ii) : i(ii) {}

   /*重载operator+,传入和返回的都是一个Interger class*/
  const Integer
  operator+(const Integer& rv) const {
    cout << "operator+" << endl;
    return Integer(i + rv.i);//将两个class的private成员,也即是整数i相加
  }
/*重载operator+=,同样是传入class类型,*/
  Integer&
  operator+=(const Integer& rv) {
    cout << "operator+=" << endl;
    i += rv.i;//同上,两个整形变量相加
    return *this;
  }
};

int main() {
//调用内置类型(这里是int型)的+和+=
  cout << "built-in types:" << endl;
  int i = 1, j = 2, k = 3;
  k += i + j;
//重载
  cout << "user-defined types:" << endl;
  Integer ii(1), jj(2), kk(3);
  kk += ii + jj;//重载了+和+=
  system("pause");
  return 0;
} ///:~

--参考方法--
#include <iostream>
#include<stdlib.h>
using namespace std;

class Integer {
int i;
public:
Integer(int ii) : i(ii) {}
// 重载加号,传入的是const &类型,所以+右边的值是不能被改变的,返回const类型,
// 所以这种加号产生的表达式的结果也是常量,不可改变
const Integer // 另外,内置加号返回的是引用类型, 而这里是普通类型,其实这样并不好,因为还要复制一份数据
operator+(const Integer& rv) const {
cout << "operator+" << endl;
return Integer(i + rv.i); // 此处是相加操作的核心代码
}
// 重载+=,传入参数说明同上; 
// 不同的是它的返回类型没有不是const的,所以返回值是可以被改变的
Integer& // 另外i,这里返回的是引用,也就是变量 i 的一个别名,因此不用复制 i 的值了
operator+=(const Integer& rv) {
cout << "operator+=" << endl;
i += rv.i; // 调用内置类型+=,求得结果
return *this;
}
};

int main() {
cout << "built-in types:" << endl;
// 由于这些重载的运算符是定义在Integer中的,所以只对Integer对象有作用
// 对于内置类型,还是使用内置类型的运算符
int i = 1, j = 2, k = 3;
k += i + j;
cout << "user-defined types:" << endl;
// 对于Integer对象,我们重载的运算符会覆盖内置类型运算符,所以调用的是重在版本的运算符
Integer ii(1), jj(2), kk(3);
kk += ii + jj;
system("pause");
return 0;
} ///:~

--参考方法--

#include <iostream>
#include<stdlib.h>
using namespace std;
 
class Integer {
    int i;
public:
    Integer(int ii) : i(ii) {}
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-19 02:34:15
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/63847/
本文WWW.DOC100.NET DOC100.NET版权所有。