c++运算符重载问题
类重载运算符++后缀operator++(int)与友元运算符重载++后缀operator++(n,int)中的int怎样理解?把他改为0,会怎样?改为别的类型float...
类重载运算符++后缀operator++(int)与友元运算符重载++后缀operator++(n,int)中的int怎样理解?把他改为0,会怎样?改为别的类型float会怎样?例如:
#include<iostream.h>
class number
{
private:
int num;
public:
number(int i){num=i;}
int operator++();
int operator++(int);
void print(){cout<<"num="<<num<<endl;}
};
int number::operator ++()
{
num++;
return num;
}
int number::operator ++(int)
{
int i=num;
num++;
return i;
}
void main()
{
number n(10);
int i=++n;
cout<<"i="<<i<<endl;
n.print();
i=n++;
cout<<"i="<<i<<endl;
n.print();
}
为什么我把(int)改为(float)发生错误 展开
#include<iostream.h>
class number
{
private:
int num;
public:
number(int i){num=i;}
int operator++();
int operator++(int);
void print(){cout<<"num="<<num<<endl;}
};
int number::operator ++()
{
num++;
return num;
}
int number::operator ++(int)
{
int i=num;
num++;
return i;
}
void main()
{
number n(10);
int i=++n;
cout<<"i="<<i<<endl;
n.print();
i=n++;
cout<<"i="<<i<<endl;
n.print();
}
为什么我把(int)改为(float)发生错误 展开
2个回答
展开全部
1. 注意++有前缀和后缀之别,前缀形式是变量先加1然后执行表达式,而后缀形式则是先执行表达式然后再使变量加1,所以在执行后缀的++运算符时应先反回对象的原始值,然后才对对象加1。
2. 默认的带有一个参数的++运算符函数是前缀++运算符,要重载后缀的++运算符必须采用另一种方式实现。
重载后缀的++运算符时应给函数多增加一个int参数,该int参数不会使用,应忽略他,该参数只是为了让编译器区分++运算符的前缀和后缀形式之间的区别。比如重载后缀++运算符的友元函数形式为hyong operator ++(hyong &a, int i){}后面的参数int i没有实际意义,应忽略他。
呵呵,因为C++规定要是int型,没说要使用float类型,这是规定,没有什么规律。
2. 默认的带有一个参数的++运算符函数是前缀++运算符,要重载后缀的++运算符必须采用另一种方式实现。
重载后缀的++运算符时应给函数多增加一个int参数,该int参数不会使用,应忽略他,该参数只是为了让编译器区分++运算符的前缀和后缀形式之间的区别。比如重载后缀++运算符的友元函数形式为hyong operator ++(hyong &a, int i){}后面的参数int i没有实际意义,应忽略他。
呵呵,因为C++规定要是int型,没说要使用float类型,这是规定,没有什么规律。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询