运算符重载 C++ 编程思想
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++ 编程思想的更多相关文章
- C#高级编程笔记2016年10月12日 运算符重载
1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...
- sdut 在机器上面向对象编程练习11(运算符重载)
在机器上面向对象编程练习11(运算符重载) Time Limit: 1000MS Memory limit: 65536K 标题叙述性说明 有两个矩阵a和b,均为2行3列,求两个矩阵之和.重载运算符& ...
- C++抽象编程·运算符重载与友元函数
运算符重载(Operator overloading) 从我们在几个前篇的类的层次介绍中可以知道,C++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其 ...
- C++ 运算符重载三(链式编程)
//运算符重载之链式编程 #include<iostream> using namespace std; //对于友元函数重载运算符只适用于左操作数是系统变量的场景 //因为成员无法在系统 ...
- YTU 2640: 编程题:运算符重载---矩阵求和
2640: 编程题:运算符重载---矩阵求和 时间限制: 1 Sec 内存限制: 128 MB 提交: 484 解决: 190 题目描述 /* 有两个矩阵a和b,均为2行3列.求两个矩阵之和. 重 ...
- 网易云课堂_C++程序设计入门(下)_第8单元:年年岁岁花相似– 运算符重载_第8单元 - 作业2:OJ编程 - 重载数组下标运算符
第8单元 - 作业2:OJ编程 - 重载数组下标运算符 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...
- C/C++编程笔记:C++入门知识丨运算符重载
本篇要学习的内容和知识结构概览 运算符重载使用场景 常规赋值操作 我们现在有一个类 想要实现这种赋值操作 具体实现如下: 所以说呢,我们在使用运算符进行运算的时候, 实际上也是通过函数来实现运算的. ...
- C++学习6-面向对象编程基础(运算符重载、类的派生与继承、命名空间)
运算符重载 重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.重载的运算符是遵循函数重载的选择原则,根据不同类型或不同参数来选择不同的重载运算符. 运 ...
- C#编程(四十)----------运算符重载
运算符重载 所谓的运算符重载是指允许用户使用用户定义的类型编写表达式的能力. 例如,通常需要编写类似与以下内容的代码,入江两个数字相加,很明显,sum是两个数字之和. int i=5,j=4; int ...
随机推荐
- linux 僵死进程
僵死进程简而言之就是:子进程退出时,父进程并未对其发出的SIGCHILD信号进行适当处理,导致子进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程. 在fork()/execve( ...
- iPhone —— 如何自制铃声(图文)
iPhone不像其他手机可以直接将MP3格式的文件设为铃声.但如果想用自己喜欢的歌曲作为铃声该怎么办呢?请听我一一道来. 一.将MP3文件转换成iPhone铃声能识别的M4R格式文件 1.向iTune ...
- YTU 2607: A代码填空题--更换火车头
2607: A代码填空题--更换火车头 时间限制: 1 Sec 内存限制: 128 MB 提交: 91 解决: 73 题目描述 注:本题只需要提交填写部分的代码,请按照C++方式提交. 假设火车有 ...
- WebDriverExtensionsByC#
测试工具//********************************************************************************************** ...
- SCSS(SASS、CSS)学习
看的这篇文章 http://www.frostsky.com/2014/07/sass-scss/ 写的还比较清晰 SASS是CSS3的一个扩展,增加了规则嵌套.变量.混合.选择器继承等等.通过使用命 ...
- networking常用命令
nc -l 3000 将开一个临时的3000端口并且侦听,用于测试
- poj2942 Knights of the Round Table 双连通分支 tarjan
题解:http://blog.csdn.net/lyy289065406/article/details/6756821 讲的很详细我就不多说了. 题目连接:http://poj.org/proble ...
- 内核打上yaffs2补丁遇到的问题
移植yaffs2文件系统时,首先要在内核中添加对yaffs2的支持,使用命令:./patch-ker.sh c 内核目录时,出现下面错误: usage: ./patch-ker.sh c/l m/ ...
- selinux --chcon命令
chcon命令:修改对象(文件)的安全上下文.比如:用户:角色:类型:安全级别. 命令格式: Chcon [OPTIONS…] CONTEXT FILES….. Chcon [OPTIONS…] –r ...
- 关于jsp利用EL和struts2标签来遍历ValueStack的东东 ------> List<Map<K,V>> 以及 Map<K,<List<xxx>>> 的结构遍历
//第一种结构Map<K,<List<xxx>>> <body> <% //显示map<String,List<Object>& ...