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 << "build-in types:" << endl;
int i = , j = , k = ;
k += i + j;
cout << "user-defined types:" << endl;
Integer ii(), jj(), kk();
kk += ii + jj;
}
//: C12:OverloadingUnaryOperators.cpp
#include <iostream>
using namespace std; // Non-member functions:
class Integer {
long i;
Integer* This() { return this;} public:
Integer(long ll = ) : i(ll) {}
//No side effects takes const& argument:
friend const Integer& operator+(const Integer& a);
friend const Integer operator-(const Integer& a);
friend const Integer operator~(const Integer& a);
friend const Integer* operator&(Interger& a);
friend const int operator!(const Integer& a);
//Side effects have non-const& argument:
//Prefix:
friend const Integer& operator++(Integer& a);
//Postfix:
friend const Integer operator++(Integer& a, int);
//Prefix:
friend const Integer& operator--(Integer& a);
//Postfix:
friend const Integer operator--(Integer& a, int);
}; //Global operators:
const Integer& operator+(const Integer& a) {
cout << "+Integer\n";
return a; //Unary + has no effect
}
const Integer operator-(const Integer& a) {
cout << "-Integer\n";
return Integer(-a.i);
}
const Integer operator~(const Integer& a) {
cout << "~Integer\n";
return Integer(~a.i);
}
Integer* operator(Integer& a) {
cout << "&Integer\n";
return a.This();
}
int operator!(const Integer& a) {
cout << "!Integer\n";
return !a.i;
}
//Prefix; return incremented value
const Integer& operator++(Integer& a) {
cout << "++Integer\n";
a.i ++;
return a;
}
//Postfix; return the value before increment:
const Integer operator++(Integer& a, int) {
cout << "Integer++\n";
Integer before(a.i);
a.i ++;
return before;
}
//Prefix; return decremented value
const Integer& operator--(Integer& a) {
cout << "--Integer\n";
a.i --;
return a;
}
//Postfix; return the value before decrement:
const Integer operator--(Integer& a, int) {
cout << "Integer--\n";
Integer before(a.i);
a.i --;
return before;
} //Show that the overloaded operators work:
void f(Integer a) {
+a;
-a;
~a;
Integer *ip = &a;
!a;
++a;
a++;
--a;
a--;
} class Byte {
unsigned char b;
public:
Byte(unsigned char bb = ) : b(bb) {}
// No side effects: const memeber function:
const Byte& operator+() const {
cout << "+Byte\n";
return *this;
}
const Byte operator-() const {
cout << "-Byte\n";
return Byte(-b);
}
const Byte operator~() const {
cout << "~Byte\n";
return Byte(~b);
}
Byte operator!() const {
cout << "!Byte\n";
return Byte(!b);
}
Byte* operator&() {
cout << "&Byte\n";
return this;
}
// Side effects: non-const member function:
const Byte& operator++() { //Prefix
cout << "++Byte\n";
b ++;
return *this;
}
const Byte operator++(int) { //Postfix
cout << "Byte++\n";
Byte before(b);
b ++;
return before;
}
const Byte& operator--() { //Prefix
cout << "--Byte\n";
b --;
return *this;
}
const Byte operator--(int) { //Postfix
cout << "Byte--\n";
Byte before(b);
b --;
return before;
}
}; void g(Byte b) {
+b;
-b;
~b;
Byte *bp = &b;
!b;
++b;
b++;
--b;
b--;
} int main() {
Integer a;
f(a);
Byte b;
g(b);
}

运算符重载 C++ 编程思想的更多相关文章

  1. C#高级编程笔记2016年10月12日 运算符重载

    1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...

  2. sdut 在机器上面向对象编程练习11(运算符重载)

    在机器上面向对象编程练习11(运算符重载) Time Limit: 1000MS Memory limit: 65536K 标题叙述性说明 有两个矩阵a和b,均为2行3列,求两个矩阵之和.重载运算符& ...

  3. C++抽象编程·运算符重载与友元函数

    运算符重载(Operator overloading) 从我们在几个前篇的类的层次介绍中可以知道,C++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其 ...

  4. C++ 运算符重载三(链式编程)

    //运算符重载之链式编程 #include<iostream> using namespace std; //对于友元函数重载运算符只适用于左操作数是系统变量的场景 //因为成员无法在系统 ...

  5. YTU 2640: 编程题:运算符重载---矩阵求和

    2640: 编程题:运算符重载---矩阵求和 时间限制: 1 Sec  内存限制: 128 MB 提交: 484  解决: 190 题目描述 /* 有两个矩阵a和b,均为2行3列.求两个矩阵之和. 重 ...

  6. 网易云课堂_C++程序设计入门(下)_第8单元:年年岁岁花相似– 运算符重载_第8单元 - 作业2:OJ编程 - 重载数组下标运算符

    第8单元 - 作业2:OJ编程 - 重载数组下标运算符 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  7. C/C++编程笔记:C++入门知识丨运算符重载

    本篇要学习的内容和知识结构概览 运算符重载使用场景 常规赋值操作 我们现在有一个类 想要实现这种赋值操作 具体实现如下: 所以说呢,我们在使用运算符进行运算的时候, 实际上也是通过函数来实现运算的. ...

  8. C++学习6-面向对象编程基础(运算符重载、类的派生与继承、命名空间)

    运算符重载 重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.重载的运算符是遵循函数重载的选择原则,根据不同类型或不同参数来选择不同的重载运算符. 运 ...

  9. C#编程(四十)----------运算符重载

    运算符重载 所谓的运算符重载是指允许用户使用用户定义的类型编写表达式的能力. 例如,通常需要编写类似与以下内容的代码,入江两个数字相加,很明显,sum是两个数字之和. int i=5,j=4; int ...

随机推荐

  1. ls命令详解

    -a 列出目录下的所有文件,包括以 . 开头的隐含文件.-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.-c 输出文件的 i 节点的修改时间,并以此排序.-d 将目录 ...

  2. 5、java反射基础

    Class对象: Class对象记录了所有与类相关的信息,当类加载器从文件系统中加载.class文件到JVM中的同时会为每一个类创建一个Class对象.通过Class对象可以获取到类的属性.方法.构造 ...

  3. framwork NHibernate

    NHibernate 一.NHibernate 1.HQL  curd语句总结 . 查询整个映射对象所有字段 ? //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String ...

  4. Git忽略文件方法【转】

    转自:http://www.cnblogs.com/shangdawei/archive/2012/09/08/2676669.html http://cwind.iteye.com/blog/166 ...

  5. supersocket中的日志处理

    接口以及类之间的关系

  6. MongoDB 学习笔记(一)基础篇

    1.MongoDB 特点 面向集合存储,存储对象类型的数据方便 模式自由,不需要定义任何模式(schma) 动态查询 完全索引,包含内部对象 复制和故障恢复方便 高效的二进制数据存储 支持c# 平台驱 ...

  7. leetcode:House Robber(动态规划dp1)

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  8. 3D volume texture和cube map

    cube map texture可以理解为6个面的纸盒, sample的时候使用vector射线型的sample. volume texture可以理解是一摞2D texture,sample的时候用 ...

  9. POJ 3259 Wormholes【Bellman_ford判断负环】

    题意:给出n个点,m条正权的边,w条负权的边,问是否存在负环 因为Bellman_ford最多松弛n-1次, 因为从起点1终点n最多经过n-2个点,即最多松弛n-1次,如果第n次松弛还能成功的话,则说 ...

  10. memcached的LRU删除机制

    1)memcached不会自动清空缓存的值如果add了一个值,但不去get它,那么这个值过期了,它也不会被清空.解释:memcached不自动检测和清空值,它只当你需要get这个值的时候,才检测这个值 ...