【发布时间】:2020-08-02 22:59:37
【问题描述】:
这是课程
#include <fstream>
#include <cstdlib>
#include <math.h>
#include <iomanip>
#include <iostream>
using namespace std;
class Point {
protected:
int x, y;
double operator-(const Point &def){
return sqrt(pow((x-def.x),2.0)+
pow((y-def.y),2.0));
}
};
class Circle: public Point {
private:
int radius;
public:
Circle(){
this->x=x;
this->y=y;
this->radius=radius;
}
Circle(int x, int y, int radius){
this->x=x;
this->y=y;
this->radius=radius;
}
void printCircleInfo() {
cout << x << " " << y << " " << radius << " " ;
}
这是我想成为 if 语句中的条件的运算符。
bool operator==(const Circle &def){
return (x==def.x) & (y==def.y) & (radius==def.radius);
}
bool doIBumpIntoAnotherCircle(Circle anotherCircle){
if (anotherCircle.radius + radius >= *this - anotherCircle )
return true;
return false;
}
};
这里是主要的
int main(){
int x,y,radius;
const int SIZE = 13;
Circle myCircleArry[SIZE];
myCircleArry[0] = Circle(5,3,9);
cout << endl;
myCircleArry[0].printCircleInfo(); cout << " ; ";
ifstream Lab6DataFileHandle;
Lab6DataFileHandle.open("Lab6Data.txt");
while (!Lab6DataFileHandle.eof( )) {
for (int i = 1; i < SIZE; i++) {
Lab6DataFileHandle>>x;
Lab6DataFileHandle>>y;
Lab6DataFileHandle>>radius;
myCircleArry[i] = Circle(x,y,radius);
if (myCircleArry[0].doIBumpIntoAnotherCircle(myCircleArry[i])) {
myCircleArry[i].printCircleInfo(); cout << " ; ";
这是 If 语句
if ( operator==( Circle &def))
{cout <<"*";
}
}
}
}
Lab6DataFileHandle.close();
}
如何使用重载的运算符作为 if 语句的条件?如果您需要任何澄清,请以其他方式询问,请在您的回答中留下一个示例。 感谢您的宝贵时间。
【问题讨论】:
-
if (operator==(Circle &def))无效。它需要是if (some_circle.operator== (some_other_circle))或(隐式调用operator==()函数)if (some_circle == some_other_circle)。此外,由于您的operator==()是一个成员函数,因此该函数应限定为const以反映a == b通常不会更改a或b的事实。 -
您的代码在应该使用函数时声明函数并没有帮助。声明和调用函数是不同的操作,使用不同的语法执行,并且您在希望调用它的地方声明它。更好地阅读您的介绍性 C++ 文本 - 猜测如何做事,显然是行不通的。
-
当我希望调用一个函数时,我应该在程序的哪个位置声明它?
-
源文件中包含调用之前(即上面)调用点的任何位置。对于类的成员函数,这意味着类定义也必须在调用它的点之前(因为在没有类定义可见性的情况下无法调用成员函数)。声明也可以在头文件中,只要该头文件在尝试使用声明的代码之前是
#included/
标签: c++ class if-statement operator-overloading