C++ 创建一个c++;在.h和.cpp文件中同时初始化文件
作业涉及使用许多类文件来输出图形的体积和面积 我的程序现在运行得很好,但我的讲师希望每个类的类文件都使用.h和.cpp文件。目前,我只为每个类使用一个.h文件 如果您能帮助我们正确地将其拆分为两个文件,我们将不胜感激。如果有任何问题,请告诉我 下面是需要变成.h和.cpp文件的class.h文件之一C++ 创建一个c++;在.h和.cpp文件中同时初始化文件,c++,class,C++,Class,作业涉及使用许多类文件来输出图形的体积和面积 我的程序现在运行得很好,但我的讲师希望每个类的类文件都使用.h和.cpp文件。目前,我只为每个类使用一个.h文件 如果您能帮助我们正确地将其拆分为两个文件,我们将不胜感激。如果有任何问题,请告诉我 下面是需要变成.h和.cpp文件的class.h文件之一 #ifndef CYLINDER_H #define CYLINDER_H class Cylinder { double height, radius; double PI=3.
#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 */
按如下方式划分代码: 在汽缸里
#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));
}
这是一个很好的实践,因为函数可以被声明任意多次,但只能定义一次<代码>无效设置值(双精度,双精度)代码>声明函数(注意没有大括号),而
定义它。通过将声明和定义划分到两个不同的文件中,您可以在许多其他文件中包含cylender.h,这样他们就可以使用该类,而不必担心它在两个地方被定义
它实际上在技术上比这更复杂,因为在类的主体内部(在花括号之间)定义的函数可以被定义多次,只要所有定义都完全相同。这被称为单定义规则或ODR,它实际上比最初看起来更复杂,因为宏和预处理器实际上可以根据先前定义的内容更改定义。这就是为什么在您完全理解ODR和预处理器之前,最好以这种方式将内容划分为.h和.cpp文件
这种方法还有一个优点,那就是写东西的顺序并不那么重要。如果您先声明所有内容,然后定义它,那么您就不太可能需要改变顺序,以便编译器在使用之前知道所有内容
我还建议阅读关于算符进动(例如这里:)的内容,因为您正在使用许多不必要的括号,我认为您可能会从中受益。例如,在卷中,所有操作符都是*从左到右求值,这非常好,因此
radius*radius*height*PI
很好。在区域中,它稍微复杂一点,但因为运算符*的优先级高于+2.0000*PI*radius*radius+2.0000*PI*radius*height
应产生相同的结果。按如下方式划分代码:
在汽缸里
#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));
}
这是一个很好的实践,因为函数可以被声明任意多次,但只能定义一次<代码>无效设置值(双精度,双精度)代码>声明函数(注意没有大括号),而
定义它。通过将声明和定义划分到两个不同的文件中,您可以在许多其他文件中包含cylender.h,这样他们就可以使用该类,而不必担心它在两个地方被定义
它实际上在技术上比这更复杂,因为在类的主体内部(在花括号之间)定义的函数可以被定义多次,只要所有定义都完全相同。这被称为单定义规则或ODR,它实际上比最初看起来更复杂,因为宏和预处理器实际上可以根据先前定义的内容更改定义。这就是为什么在您完全理解ODR和预处理器之前,最好以这种方式将内容划分为.h和.cpp文件
这种方法还有一个优点,那就是写东西的顺序并不那么重要。如果您先声明所有内容,然后定义它,那么您就不太可能需要改变顺序,以便编译器在使用之前知道所有内容
我还建议阅读关于算符进动(例如这里:)的内容,因为您正在使用许多不必要的括号,我认为您可能会从中受益。例如,在卷中,所有操作符都是*从左到右求值,这非常好,因此
radius*radius*height*PI
很好。在区域中,它稍微复杂一点,但因为运算符*的优先级高于+2.0000*PI*radius*radius+2.0000*PI*radius*height
应产生相同的结果。按如下方式划分代码:
在汽缸里
#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));
}
这是一个很好的实践,因为函数可以被声明任意多次,但只能定义一次<代码>无效设置值(双精度,双精度)代码>声明函数(注意没有大括号),而
定义它。通过将声明和定义划分到两个不同的文件中,您可以在许多其他文件中包含cylender.h,这样他们就可以使用该类,而不必担心它在两个地方被定义
它实际上在技术上比这更复杂,因为在类的主体内部(在花括号之间)定义的函数可以被定义多次,只要所有定义都完全相同。这被称为单定义规则或ODR,它实际上比最初看起来更复杂,因为宏和预处理器实际上可以根据先前定义的内容更改定义。这就是为什么在您完全理解ODR和预处理器之前,最好以这种方式将内容划分为.h和.cpp文件
这种方法还有一个优点,那就是写东西的顺序并不那么重要。如果您先声明所有内容,然后定义它,那么您就不太可能需要改变顺序,以便编译器在使用之前知道所有内容
我还建议阅读关于算符进动(例如这里:)的内容,因为你做了很多不必要的事情