该作业涉及使用许多类文件来输出数量和数字区域。
我的程序现在完美无缺,但我的教师希望类文件为每个类使用.h和.cpp文件。目前我只为每个班级使用.h文件。
非常感谢如何正确地将其拆分为两个文件。如果有任何问题,请告诉我!
以下是需要成为.h和.cpp文件的类.h文件之一。
#ifndef CYLINDER_H
#define CYLINDER_H
class Cylinder {
double height, radius;
double PI=3.1415926535898;
public:
void set_values (double,double);
double volume () {return (radius*radius)*(height)*PI;}
double area() {return ((2.0000*PI)*(radius)*(radius))+((2.0000*PI)*(radius*height));}
};
void Cylinder::set_values (double x, double y) {
height = x;
radius = y;
}
#endif /* CYLINDER_H */
答案 0 :(得分:2)
按如下方式划分代码:
在Cylinder.h中
#ifndef CYLINDER_H
#define CYLINDER_H
class Cylinder {
double height, radius;
double PI=3.1415926535898;
public:
void set_values(double,double);
double volume();
double area();
};
#endif /* CYLINDER_H */
在Cylinder.cpp
中#include "Cylinder.h"
void Cylinder::set_values(double x, double y) {
height = x;
radius = y;
}
double Cylinder::volume() {
return (radius*radius)*(height)*PI;
}
double Cylinder::area() {
return ((2.0000*PI)*(radius)*(radius))+((2.0000*PI)*(radius*height));
}
这是一个好习惯的原因是函数可以根据需要多次声明,但只定义一次。 void set_values(double,double);
声明函数(注意没有花括号)而
void Cylinder::set_values(double x, double y) {
height = x;
radius = y;
}
定义它。通过将声明和定义分成两个不同的文件,您可以在许多其他文件中包含cylender.h,以便他们可以使用该类而不必担心它在两个地方被定义。
实际上技术上比这更复杂,因为只要所有定义完全相同,就允许在类的主体内(花括号之间)定义的函数被定义多次。这称为单定义规则或ODR,它实际上比起初看起来更复杂,因为宏和预处理器实际上可以根据先前定义的内容更改定义。这就是为什么以这种方式将事物分成.h和.cpp文件的好建议,直到你完全理解ODR和预处理器为止。
此方法还具有以下优点:写入内容的顺序并不重要。如果先声明所有内容然后定义它,则不太可能需要对顺序进行随机排序,以便编译器在使用之前知道所有内容。
我还建议阅读关于运算符优先级(例如这里:http://en.wikipedia.org/wiki/Operators_in_C_and_C++),因为你做了许多不需要的括号我认为你可以从中受益。例如,在体积中,所有运算符都是*从左到右计算,这非常好,因此radius*radius*height*PI
很好。在区域中它稍微复杂一点,但是因为operator *具有比+ 2.0000*PI*radius*radius+2.0000*PI*radius*height
更高的优先级应该产生相同的结果。