我遇到了这段代码,我感兴趣的是评论//<-- 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));
}
答案 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 ++。