做一个很简单的C++ 实验,竟然报错
以下为程序代码,写一个圆类,实现运算符重载。
头文件:Circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
class Circle
{
public:
Circle():PI(3.14) {}
Circle(double radius):PI(3.14)
{
this->radius=radius;
}
double getRadius()
{
return radius;
}
void setRadius(double radius)
{
this->radius=radius;
}
double getArea() const
{
return PI*radius*radius;
}
bool operator<(const Circle& c);
bool operator<=(const Circle& c);
bool operator==(const Circle& c);
bool operator!=(const Circle& c);
bool operator>(const Circle& c);
bool operator>=(const Circle& c);
void operator=(const Circle& c)
{
radius=c.getRadius();
}
private:
double radius;
const double PI;
};
#endif
实现文件 Circle.cpp
#include"Circle.h"
bool Circle::operator<(const Circle& c)
{
return radius(const Circle& c)
{
return radius>c.getRadius();
}
bool Circle::operator>=(const Circle& c)
{
return radius>=c.getRadius();
}
测试文件main.cpp
#include"Circle.h"
#include
#include
#include
#include
using namespace std;
int main()
{
vector vec;
int n,i;
cout<<"Please input the number of circles:"<>n;
cout<<"Please input the radius of circles(eg.1 2 3 4 5 6...):"<>r;
vec.push_back(Circle(r));
}
sort(vec.begin(),vec.end());
cout<<"after sorted:"<
无奈之下,百度之,得知问题根源在于头文件的get函数
double getRadius()
{
return radius;
}
由于Circle.cpp文件中实现运算符重载的函数中形式参数为const Circle&类型,const对象在调用成员函数时,会将this指针强制转换成const this指针,本例中,形式参数中的c对象会找成员函数中对应的const类型 getRadius函数,而编译器无法将非const类型的getRadius函数转换成const类型的getRadius函数,因此出现编译错误。
解决方法:
将getRadius成员函数改为
double getRadius() const
{
return radius;
}
即可,或将Circle.cpp文件中的形式参数改为Circle& c。