在.h和.cpp文件中创建c ++类文件

时间:2013-12-10 22:02:19

标签: c++ class

该作业涉及使用许多类文件来输出数量和数字区域。

我的程序现在完美无缺,但我的教师希望类文件为每个类使用.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 */

1 个答案:

答案 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更高的优先级应该产生相同的结果。