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