C++ 比较一个类的两个实例中的变量
我希望有一个关于我正在构建的一些代码的快速问题。。基本上,我想比较一个类(金鱼)的两个实例之间的变量,看看其中一个是否在另一个的范围内。它们都有领土类别,而领土类别又使用由x和y数据点组成的点类别 现在我很想知道为什么下面的方法不起作用,请: (此代码位比较两个点:a和b,每个点有两个点,东北(ne)和西南(sw)以及它们的x和y图) 如果((a->x_-ne x_-ne&&a->y_-ne)&& (a->x_sw=>b->x_sw&&a->y_sw=>b->sw){ 返回true; }否则返回falseC++ 比较一个类的两个实例中的变量,c++,oop,C++,Oop,我希望有一个关于我正在构建的一些代码的快速问题。。基本上,我想比较一个类(金鱼)的两个实例之间的变量,看看其中一个是否在另一个的范围内。它们都有领土类别,而领土类别又使用由x和y数据点组成的点类别 现在我很想知道为什么下面的方法不起作用,请: (此代码位比较两个点:a和b,每个点有两个点,东北(ne)和西南(sw)以及它们的x和y图) 如果((a->x_-ne x_-ne&&a->y_-ne)&& (a->x_sw=>b->x_sw&&a->y_sw=>b->sw){ 返回true; }否则返回
我可以想到一个工作(例如,通过一个get定位方法),并使用主体中的函数来比较,但我很好奇,知道,作为一个崭露头角的C++程序员——为什么上面的,或者类似的实现似乎不起作用。 还有,实现上述目标的最干净、最优雅的方式是什么?也许有朋友的作用
非常感谢 编辑:添加了一些注释(希望使变量更清晰)//类点{
//公众:
//浮动x;
//浮动y;
//点(浮点x_in,浮点y_in){//2参数构造函数
//x=x_英寸;
//y=y_英寸;
// }
// };
//阶级领域{
//私人:
//东北、西南点;
//公众:
//地域(浮动x_ne、浮动y_ne、浮动x_sw、浮动y_sw)
//:ne(x_ne,y_ne),sw(x_sw,y_sw){
// }
//bool包含检查(区域a、区域b){
////检查a是否包含在b中(按顺序!)
//如果((a->x_-ne x_-ne&&a->y_-ne)&&
//(a->x_sw=>b->x_sw&&a->y_sw=>b->sw){
//返回true;
//}否则返回false;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// };
// class goldfish {
// protected:
// float size;
// point pos;
// territory terr;
// public:
// goldfish(float x, float y) : pos(x,y), terr(x-1,y-1,x+1,y+1) { //constructor
// size = 2.3;
// }
// void retreat() { //what happens in the case of loss in attack
// /*
// if(goldfish.size[1] - goldfish.size[2] <= 1 && goldfish.size[1] - goldfish.size[2] > 0) {
// size = size - 0.2;
// }
// */
// }
// void triumph() {
// }
// void attack() {
// }
// // void goldfish()
// };
/};
//等级金鱼{
//受保护:
//浮子大小;
//点位;
//领土地球;
//公众:
//金鱼(浮体x,浮体y):位置(x,y),陆地(x-1,y-1,x+1,y+1){
//尺寸=2.3;
// }
//void return(){//如果攻击失败,会发生什么情况
// /*
//if(金鱼.尺寸[1]-金鱼.尺寸[2]0){
//尺寸=尺寸-0.2;
// }
// */
// }
//无效胜利(){
// }
//无效攻击(){
// }
////void goldfish()
// };
乍一看:没有=>运算符。乍一看,它被称为>=运算符。没有=>运算符。它被称为>=
bool contain_check(territory a, territory b)
您正在传入两个territory对象,而不是指向territory对象的指针。因此,您需要使用
操作符而不是->
操作符来访问成员。类似于:
a.ne
此外,您已将ne
和sw
成员声明为私有,这意味着不相关的函数无法访问它们。它们需要是公共的,以便contain\u check()
函数访问它们
您正在传入两个territory对象,而不是指向territory对象的指针。因此,您需要使用
操作符而不是->
操作符来访问成员。类似于:
a.ne
此外,您已将
ne
和sw
成员声明为私有,这意味着不相关的函数无法访问它们。它们需要为contain\u check()公开
函数访问它们。假设您的区域是矩形,并且您通过比较两个类(ne和nw)的角点来检测重叠您只检查西北角和东北角,这两个角有一个直线区域。正如@eric Malenfant所提到的,您有作为类成员的结构,这些成员由“.”操作符访问。这些成员是ne和sw,因此引用它们的方式是:“a.ne.x”
所以从这个开始:
if ((a->x_ne <= b->x_ne && a->y_ne <= b-> ne) &&
(a->x_nw => b->x_nw && a->y_nw => b-> nw)) {
return true;
} else return false;
if((a->x_-ne x_-ne&&a->y_-ne)和
(a->x_nw=>b->x_nw&&a->y_nw=>b->nw)){
返回true;
}否则返回false;
将其更改为:
return ( (a.ne.x <= b.ne.x && a.ne.y <= b.ne.y)
&& (a.sw.x >= b.sw.x && a.sw.y >= b.sw.y));
return((a.ne.x=b.sw.y));
假设您的区域是矩形,并且通过比较两个类(ne和nw)的角来检测重叠您只检查西北角和东北角,这两个角有一个直线区域。正如@eric Malenfant所提到的,您有作为类成员的结构,这些成员由“.”操作符访问。这些成员是ne和sw,因此引用它们的方式是:“a.ne.x”
所以从这个开始:
if ((a->x_ne <= b->x_ne && a->y_ne <= b-> ne) &&
(a->x_nw => b->x_nw && a->y_nw => b-> nw)) {
return true;
} else return false;
if((a->x_-ne x_-ne&&a->y_-ne)和
(a->x_nw=>b->x_nw&&a->y_nw=>b->nw)){
返回true;
}否则返回false;
将其更改为:
return ( (a.ne.x <= b.ne.x && a.ne.y <= b.ne.y)
&& (a.sw.x >= b.sw.x && a.sw.y >= b.sw.y));
return((a.ne.x=b.sw.y));
> > P>我注意到两个可能的问题(注:不是C++专家):
您使用=>表示“大于或等于”,其中应为>=
也可以认为B->NE应该是B->yne。 < P>我注意到两个可能的问题,即:不是C++专家:
您使用=>表示“大于或等于”,其中应为>=
另外,我认为b->ne应该是b->y_ne。你说的“不工作”是什么意思?我不编译
如果contain\u check
是按您的帖子所示编写的,则问题在于您在非指针上使用了箭头运算符。请改用点:
if ((a.x_ne <= b.x_ne && a.y_ne <= b.ne) //etc.
if((a.x_ne你说的“不工作”是什么意思?我不编译
如果contain\u check
是按您的帖子所示编写的,则问题在于您在非指针上使用了箭头运算符。请改用点:
if ((a.x_ne <= b.x_ne && a.y_ne <= b.ne) //etc.
if((a.x_ne对不起,我显然(非常)困惑。谢谢大家!下面的作品:
if ((a.ne.x <= b.ne.x && a.ne.y <= b.ne.y) &&
(a.sw.x >= b.sw.x && a.sw.y >= b.sw.y)) {
return true;
} else return false;
}
if((a.ne.x=b.sw.y)){
返回true;
}否则返回false;
}
对不起,我显然(非常)困惑。谢谢大家!下面的作品:
if ((a.ne.x <= b.ne.x && a.ne.y <= b.ne.y) &&
(a.sw.x >= b.sw.x && a.sw.y >= b.sw.y)) {
return true;
} else return false;
}
if((a.ne.x=b.sw.y)){
返回true;
}否则返回false;
}
方法bool territory::contain_check(const territory&a、const territory&b);应为