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



我偶然发现了这段代码,我对下面用注释//<-- 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)); 
}

它们是上述类(structs)中定义的函数的实现。不过,通常情况下,你会在你的cpp文件中这样做,所以你的h文件中会有:

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

然后在您的cpp文件中,您将使用添加实现

int Foo::method1(){
....
}

不过,这段代码有点傻,因为类是用typedef struct语法以ye olde c方式定义的。这在某些情况下是有意义的,因为c代码也是有效的c++,所以您可以将代码编译为两者。然而,由于成员函数的原因,c++并不总是有效的c,并且此代码肯定是c++,因此使用typedef结构语法没有意义。可能是旧代码被修改了。

您要指向的行引用函数的声明。我将解释其中一个lne,因为你可以对其他lne应用相同的lgic。

让我们看看这条线:

void dot::print(void){

这一行的第一个字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而不是c++。

最新更新