增量操作符的重载

++增量互有前增量和后增量区别,重载操作符时,虽然函数名相同,但是应有相应的区别.对于一个整型变量前增量操作符的结果与返回值变量是一致的,而后增量操作符返回的是一个临时变量。于是在增量操作符重载时也需要有前增量与后增量的区分。

前增量操作对象与返回对象是同一个变量,在反应对象的前增量操作时,要求参数为对象的引用,返回值也是对象的引用:

className& operator++() ;//前增量操作符设置为类成员函数

friend className& operator++(className&a) ;//前增量符作符设置为类友元函数。

而后增量符同样要求参数为引用,因为在调用上下中实参发生啦改变,但是为了与前增量符有所区别,C++提供了一个技术处理:

className operator++(int ) ;//后量操作符设置为类成员函数

friend className operator++(className &a,int i);  //友元函数,调用后增量符违背了函数参数匹配的常规,但是编译器专门做了特殊处理。

对于流操作符。由于流操作符前置对象参数为ostream&out,它不是该类的对象,所以不可以设置为类的成员函数,必须设置为友元函数,友元函数不是类的成员函数,但是他的特殊之处在于他可以访问类的私有成员。所以有关流的操作符重载必须声明为友元函数,如 friend ostream& operator(className&a);

时间: 2024-10-05 03:07:29

增量操作符的重载的相关文章

关于解引用*和箭头操作符->的重载

这里以一个智能指针类为例,智能指针所指为一个对象. 而事实上,STL迭代器的开发均需要重载这两个操作符,上一篇文章分析STL 迭代器中除了要用到template技巧外,还需要重载技巧 1 #include<iostream> 2 using namespace std; 3 class Screen 4 { 5 6 public: 7 friend ostream& operator<<(ostream&os, Screen &s); 8 int actio

操作符的重载

1.基本 输入和输出 cout << "hello" << endl << "world"; 输出: hello world 可见,输出,endl 是换行的作用 int x; cout << "input the num what you want:"; cin >> x; cout << "the num you input is:"; cout <

c++ new和delete操作符的重载

先分析一条语句: Base *pb= new Base; 这条语句是怎么执行的?首先,这个函数调用标准C++的operator new()函数,然后调用Base的构造函数. 如果我们自定义new时,可以自定义一个new,如 class Base { static void* operator new(size_t size) { } static void operator delete(void *p) { } } 这个Base类里面的new 和delete覆盖掉标准new和标准delete,

【转】c++ new操作符的重载

基本概念: 1. 操作符重载:C++支持对某个操作符赋予不同的语义 2. new操作符:申请内存,调用构造函数 关于c++ new操作符的重载 你知道c++ 的new 操作符和operator new 的区别么?也许你还会问,他们有区别吗? 当你写下面这样的代码时, string *pa = new string("memory managerment"); 你使用的是new 操作符,这个操作符和sizeof 一样,是c++ 语言级别支持的.你不能改变它的语义,它做的事情总是不变的:分

初探C++运算符重载学习笔记&lt;3&gt; 增量减量运算符重载

初探C++运算符重载学习笔记<1> 初探C++运算符重载学习笔记<2> 重载为友元函数     增量.减量运算符++(--)分别有两种形式:前自增++i(自减--i),后自增i++(自减i--) 因此当我们重载该运算符时,要重载相应形式的运算符. T & operator ++() // 前自增++i T & operator ++(int) //后自增 i++ 举例: #include <iostream> using namespace std; c

数组操作符的重载(二十八)

我们在学习了 string 类对象后,就不禁头脑中冒出了一个问题:string 类对象还具备 C 方式字符串的灵活性吗?还能直接访问单个字符吗?那么 string 类最大限度的考虑了 C 字符串的兼容性,可以按照使用 C 字符串的方式使用 string 对象. 下来我们用 C 方式使用 string 类,看看示例代码 #include <iostream> #include <string> using namespace std; int main() {     string 

C++中前置操作符和后置操作符的重载

1,C 语言中讨论了原生含义,C++ 中有必要考虑前置.后置操作符能够重载,有何问题: 2,值得思考的问题: 1,下面的代码有没有区别?为什么? 1,i++  // i 的值作为返回值,i 自增 1: 2,++i  // i 自增 1,i 的值作为返回值: 3,没有使用返回值,由于编译器(不同的编译器都是一样的)的优化,在工程上面,这两行代码没有区别: 2,真的有区别吗?编程实验: 1,main.cpp 文件: 1 #include <iostream> 2 #include <stri

C++学习之路: 特殊操作符-&gt;的重载

转自:http://blog.csdn.net/custa/article/details/5674434 primer 书上对重载该操作符的解释过于简单,但是总结性十分强: 重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象. 如果返回类型是指针,则内置箭头操作符可用于该指针,编译器对该指针解引用并从结果对象获取指定成员.如果被指向的类型没有定义那个成员,则编译器产生一个错误. 如果返回类型是类类型的其他对象(或是这种对象的引用),则将递归应用该操作符.编译器检

初步C++运算符重载学习笔记&amp;lt;3&amp;gt; 增量递减运算符重载

初步C++运算符重载学习笔记<1> 初探C++运算符重载学习笔记<2> 重载为友元函数     增量.减量运算符++(--)分别有两种形式:前自增++i(自减--i).后自增i++(自减i--) 因此当我们重载该运算符时,要重载对应形式的运算符. T & operator ++() // 前自增++i T & operator ++(int) //后自增 i++ 举例: #include <iostream> using namespace std; c