这个结构是什么:“void dot :: print(void){”?

时间:2017-02-05 00:00:12

标签: c++ function struct

我遇到了这段代码,我感兴趣的是评论//<-- This下面标记的内容是什么。

如果它有一个名字,那么我想知道(如果可能的话,谷歌并获取更多信息)。

#include <stdio.h>
typedef struct point {
 float x,y;
 void print(void);
} dot;

typedef struct rect {
  dot pt1,pt2;
  float area(void);
  dot center(void);
  void print(void);
} rectangle;

void dot::print(void){ //<-- This
  printf("(%3.1f,%3.1f)", x, y);
}

void rectangle::print(void){ //<-- This
  pt1.print(); printf(":"); pt2.print(); 
}

dot rectangle::center(void){ //<-- This 
  dot c; c.x=(pt1.x + pt2.x)/2;
  c.y=(pt1.y + pt2.y)/2; return c;
}

float rectangle::area(void){ //<-- This
  return((pt2.x-pt1.x)*(pt2.y-pt1.y)); 
}

2 个答案:

答案 0 :(得分:2)

它们是在类(结构)abouse中定义的函数的实现。通常,您可以在cpp文件中执行此操作,因此您的h文件将包含:

class Foo{
     int method1();
     int method2();
}

然后在你的cpp文件中,你将使用:

添加实现
int Foo::method1(){
   ....
}

这段代码有点傻,因为类是使用typedef struct语法以 ye olde c way 定义的。这在某些情况下是有意义的,因为c代码也是有效的c++所以你可以拥有编译为两者的代码。但是c++并不总是有效c,并且由于成员函数,此代码ID肯定是c++,因此使用typedef struct语法没有意义。可能是旧代码已被修改。

答案 1 :(得分:0)

您指向的行是指函数的声明。我将解释其中一个lnes,因为你可以对其他人使用相同的lgic。

让我们来看看这一行:

    void dot::print(void){

此行中的第一个单词void定义从函数返回的数据类型。由于它是无效的,因此该函数不返回任何值,这很明显,因为整个函数中没有返回语句。

    void dot::print(void) {
        printf("(%3.1f,%3.1f)", x, y); // this is the last line of the function. This function does not pass on any value or data
    }

接下来是dot::,它是结构点的对象。如果你看到结构点的结束} 之后,你会看到这里声明了点。

对于对象点,有一个名为 print()的函数声明。此函数在此处定义,但由于我们必须指出我们必须指示print()是dot的成员,因此我们在声明中的print(void)之前添加了dot ::。

最后是括号中的空白。这只是意味着函数没有来自调用它的函数的输入参数;换句话说,它不需要来自函数外部的任何数据。

作为建议,您的代码比c ++更多。你最好将这个问题标记为c而不是c ++。