比较两个类实例中的变量

时间:2009-11-03 18:49:28

标签: c++ oop

我希望是一个关于我正在构建的一些代码的快速问题..基本上我想比较一个类(金鱼)的两个实例之间的变量,看看是否在另一个的领域内。他们都有领土分支,而后者则使用由x和y数据点组成的点分支。

现在我很想知道为什么以下不起作用请

(这段代码比较两点:a& b,每个点有两个点,东北(ne)和西南(sw)及其x和y图)     if((a-> x_ne< = b-> x_ne&& a-> y_ne< = b-> ne)&&         (a-> x_sw => b-> x_sw&& a-> y_sw => b-> sw)){         返回true;        } else return false;

我可以想到一个解决方法(例如,通过使用get location方法),并使用主体中的函数进行比较,但我很好奇地知道 - 作为一个萌芽的c ++程序员 - 为什么以上,或类似的实现似乎不起作用。

而且,实现上述目标的最干净,最优雅的方式是什么?有朋友的功能吗?

非常感谢

编辑:添加了一些注释(希望使变量更清晰)

// class point {
// public: 
//   float x;
//   float y;

//   point(float x_in, float y_in) { //the 2 arg constructor 
//     x = x_in;
//     y = y_in;
//   }
// };

// class territory {

// private:
//   point ne, sw;

// public:
//   territory(float x_ne, float y_ne, float x_sw, float y_sw) 
//     : ne(x_ne, y_ne), sw(x_sw,y_sw) {
//   }  


// bool contain_check(territory a, territory b) {
//   //checks if a is contained in b (in THAT order!) 

//     if ((a->x_ne <= b->x_ne && a->y_ne <= b-> ne) && 
//       (a->x_sw => b->x_sw && a->y_sw => b-> sw)) {
//     return true; 
//   } else return 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() 
// };

7 个答案:

答案 0 :(得分:2)

乍一看:没有a =&gt;运营商。它被称为&gt; =

答案 1 :(得分:2)

假设您的区域是矩形,并且您通过比较两个类别(ne和nw)的角来检测重叠,那么您只检查具有一条线区域的西北角和东北角。正如@ÉricMalenfant所提到的,你有结构作为类成员,可以通过'。'访问。运营商。那些成员是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;

将其更改为:

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));

答案 2 :(得分:1)

“不工作”是什么意思?我不编译?

如果您的帖子中显示contain_check,则问题是您在非指针上使用箭头运算符。改为使用点:

    if ((a.x_ne <= b.x_ne && a.y_ne <= b.ne) //etc.

答案 3 :(得分:0)

bool contain_check(territory a, territory b)

您传入两个区域对象,而不是指向区域对象的指针。因此,您需要使用.运算符来访问成员而不是->运算符。类似的东西:

a.ne

此外,您已将nesw成员声明为私有,这意味着不相关的函数无法访问它们。他们需要公开contain_check()函数才能访问它们。

答案 4 :(得分:0)

我注意到两个可能的问题(注意:不是C ++专家):

你使用=&gt;对于“大于或等于”,它应该是> =。

另外,我认为b-&gt; ne应该是b-&gt; y_ne。

答案 5 :(得分:0)

抱歉,我显然(非常)困惑。多谢你们!以下作品:

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;
  }

答案 6 :(得分:0)

方法bool territory :: contains_check(const territory&amp; a,const territory&amp; b);应声明为静态。这说得通。 或者,更好的是,将其写为独立功能,因为它与类别区域无关;它会检查两个实例之间的某种关系,对吧?