关于C++重载运算符 10
我看书上的重载运算符是这么写的:返回类型&operator++(){++属性return*this;}我有两点不明白:1、为什么返回类型后面要跟个引用符号呢。还是说这个其...
我看书上的重载运算符是这么写的:
返回类型& operator ++(){
++属性
return *this;}
我有两点不明白:
1、为什么返回类型后面要跟个引用符号呢。还是说这个其实并不是返回类型,而是创建了一个类?
2、return this的时候为什么是*this,不是说this就是指当前的类的地址吗。难道这个意思就是返回一个当前地址的解除引用,也就是一个类咯?
那如果是这样推敲的话,意思就是 其实并不是返回类型&而是一个实体类了?
求大神讲解。。书上没说清楚。。。 展开
返回类型& operator ++(){
++属性
return *this;}
我有两点不明白:
1、为什么返回类型后面要跟个引用符号呢。还是说这个其实并不是返回类型,而是创建了一个类?
2、return this的时候为什么是*this,不是说this就是指当前的类的地址吗。难道这个意思就是返回一个当前地址的解除引用,也就是一个类咯?
那如果是这样推敲的话,意思就是 其实并不是返回类型&而是一个实体类了?
求大神讲解。。书上没说清楚。。。 展开
2016-06-21 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
重载运算[ ],在需要重载的类中声明 ClassName& operator [](int i)就可以了。
参数i是代表传入的[ ]括号中的值(索引)。因为我们使用[ ]的使用会用到类似 a[i] = value的表达式去赋值,所以返回类的引用可以支持赋值操作。
这里有我修改的一段示例代码
#include<iostream>
using namespace std;
class point {
private:
int x, y;
public:
static int count;
point(int xx, int yy) :x(xx), y(yy) { count++; }
point() { count++; }
};
class ArrPoint
{
private:
int size;
point* p;
public:
ArrPoint(int s)
{
p = new point[s];
size = s;
}
point& operator [](int i)
{
if(i >= size)
{
// 越界处理
}
return p[i];
}
};
int main()
{
ArrPoint a(5);
a[0], a[1], a[2], a[3], a[4];
return 0;
}
参数i是代表传入的[ ]括号中的值(索引)。因为我们使用[ ]的使用会用到类似 a[i] = value的表达式去赋值,所以返回类的引用可以支持赋值操作。
这里有我修改的一段示例代码
#include<iostream>
using namespace std;
class point {
private:
int x, y;
public:
static int count;
point(int xx, int yy) :x(xx), y(yy) { count++; }
point() { count++; }
};
class ArrPoint
{
private:
int size;
point* p;
public:
ArrPoint(int s)
{
p = new point[s];
size = s;
}
point& operator [](int i)
{
if(i >= size)
{
// 越界处理
}
return p[i];
}
};
int main()
{
ArrPoint a(5);
a[0], a[1], a[2], a[3], a[4];
return 0;
}
2016-06-21
展开全部
重载的赋值操作符函数,都必须是类成员函数。你在类中声明了一个friend的赋值操作符函数,但它不是类成员函数。你在下面定义了一个h类的重载赋值操作符成员函数(h::operator=),而h类中却没有它的声明。还有,重载的赋值操作符函数,只能有1个参数,由于函数必须是类成员函数,那么类对象就是赋值号的左值,这1个参数就是赋值号的右值。我猜测你的本意是想写一个函数,把h类型转换为整型,对吧?如果是这样的话,那么就不能用重载赋值操作符的方法,而要定义一个类型转换操作符函数:classh{public:intdata;operatorint()const;//类型转换操作符函数(转整型)};h::operatorint()const{returndata;}//使用方法示例:intfoo(consth&val){intdata=val;//这里会调用类型转换操作符函数returndata;}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询