使用 class 圆计算 class 圆柱
Calculate class Cylinder using class Circle
class“圆”的构造函数允许通过参数指定半径,而如果不指定参数则无法创建Circle
类型的对象。此外,不得将实数自动转换为 Circle
对象。 Set
方法与构造函数的作用相同,也应该得到支持,除了它允许稍后更改已创建对象的半径。
Cylinder
class构造函数需要两个参数,分别代表滚子的底面半径和高度。如果不指定上述信息,也无法创建此 class 的实例。它还应该支持“Set”功能,它与构造函数的作用相同,只是它允许您修改已创建的对象。
两个classes必须有其他方法(在代码中列出)。
我需要在classCylinder
里面使用classCircle
来实现计算体积、面积等功能。
#include <cmath>
#include <iostream>
class Circle {
double radius;
public:
Circle(double r);
void Set(double r);
double GetRadius() const;
double GetPerimeter() const;
double GetArea() const;
void Scale(double s);
void Print() const;
};
class Cylinder {
Circle baze;
double height;
public:
Cylinder(double r_baze, double h);
void Set(double r_baze, double h);
Circle GetBaze() const;
double GetRadiusOfBaze() const;
double GetHeight() const;
double GetArea() const;
double GetVolume() const;
void Scale(double s);
void Print() const;
};
int main() {
return 0;
}
Circle::Circle(double r) {
radius = r;
}
void Circle::Set(double r) {
radius = r;
}
double Circle::GetRadius() const { return radius; }
double Circle::GetPerimeter() const { return 2 * 4 * atan(1) * radius; }
double Circle::GetArea() const { return radius * radius * 4 * atan(1); }
void Circle::Scale(double s) {
radius *= s;
}
void Circle::Print() const {
std::cout << "R= " << GetRadius() << " O= " << GetPerimeter()
<< " P= " << GetRadius();
}
Cylinder::Cylinder(double r_baze, double h) {
baze.GetRadius() = r_baze;
height = h;
}
void Cylinder::Set(double r_baze, double h) {
baze.GetRadius() = r_baze;
height = h;
}
Circle Cylinder::GetBaze() const { return baze; }
double Cylinder::GetRadiusOfBaze() const { return baze.GetRadius(); }
double Cylinder::GetHeight() const { return height; }
double Cylinder::GetArea() const {
return baze.GetArea() * 2 + baze.GetPerimeter() * height;
}
double Cylinder::GetVolume() const { return baze.GetArea() * height; }
void Cylinder::Scale(double s) {
baze.GetRadius() *= s;
height *= s;
}
void Cylinder::Print() const {
std::cout << "R= " << baze.GetRadiusOfBaze() << " H= " << height
<< " P= " << GetArea() << " V= " << GetVolume();
}
我是面向对象编程概念的新手。你能帮我弄清楚我哪里出错了吗?
我无法编译这个,因为我收到错误:
57 : no matching function for call to ‘Circle::Circle()’
14: note: candidate: ‘Circle::Circle(double)’
14: note: candidate expects 1 argument, 0 provided
3: note: candidate: ‘constexpr Circle::Circle(const Circle&)’
3: note: candidate expects 1 argument, 0 provided
62, 70, 91 : lvalue required as left operand of assignment
Cylinder::Cylinder(double r_baze, double h) {
baze.GetRadius() = r_baze;
height = h;
}
在您的 Cylinder
class 中,当您的构造函数被调用时,baze
被隐式初始化为不存在的默认构造函数。
您想使用 initializer list 来处理该初始化,此时您的 Cylinder
构造函数中的代码变得不必要了。
Cylinder::Cylinder(double r_baze, double h)
: baze(r_baze), height(h) {
}
或者,您可以在功能上为 Circle
class 提供默认构造函数,然后 Set
在 Cylinder
的构造函数中提供半径,但这需要更多工作.
Circle::Circle(double r=0.0) {
radius = r;
}
Cylinder::Cylinder(double r_baze, double h) {
baze.Set(r_baze);
height = h;
}
还有...
请注意 GetRadius
returns 一个 double
不能赋值给,所以你会在那行代码上得到一个错误。
class“圆”的构造函数允许通过参数指定半径,而如果不指定参数则无法创建Circle
类型的对象。此外,不得将实数自动转换为 Circle
对象。 Set
方法与构造函数的作用相同,也应该得到支持,除了它允许稍后更改已创建对象的半径。
Cylinder
class构造函数需要两个参数,分别代表滚子的底面半径和高度。如果不指定上述信息,也无法创建此 class 的实例。它还应该支持“Set”功能,它与构造函数的作用相同,只是它允许您修改已创建的对象。
两个classes必须有其他方法(在代码中列出)。
我需要在classCylinder
里面使用classCircle
来实现计算体积、面积等功能。
#include <cmath>
#include <iostream>
class Circle {
double radius;
public:
Circle(double r);
void Set(double r);
double GetRadius() const;
double GetPerimeter() const;
double GetArea() const;
void Scale(double s);
void Print() const;
};
class Cylinder {
Circle baze;
double height;
public:
Cylinder(double r_baze, double h);
void Set(double r_baze, double h);
Circle GetBaze() const;
double GetRadiusOfBaze() const;
double GetHeight() const;
double GetArea() const;
double GetVolume() const;
void Scale(double s);
void Print() const;
};
int main() {
return 0;
}
Circle::Circle(double r) {
radius = r;
}
void Circle::Set(double r) {
radius = r;
}
double Circle::GetRadius() const { return radius; }
double Circle::GetPerimeter() const { return 2 * 4 * atan(1) * radius; }
double Circle::GetArea() const { return radius * radius * 4 * atan(1); }
void Circle::Scale(double s) {
radius *= s;
}
void Circle::Print() const {
std::cout << "R= " << GetRadius() << " O= " << GetPerimeter()
<< " P= " << GetRadius();
}
Cylinder::Cylinder(double r_baze, double h) {
baze.GetRadius() = r_baze;
height = h;
}
void Cylinder::Set(double r_baze, double h) {
baze.GetRadius() = r_baze;
height = h;
}
Circle Cylinder::GetBaze() const { return baze; }
double Cylinder::GetRadiusOfBaze() const { return baze.GetRadius(); }
double Cylinder::GetHeight() const { return height; }
double Cylinder::GetArea() const {
return baze.GetArea() * 2 + baze.GetPerimeter() * height;
}
double Cylinder::GetVolume() const { return baze.GetArea() * height; }
void Cylinder::Scale(double s) {
baze.GetRadius() *= s;
height *= s;
}
void Cylinder::Print() const {
std::cout << "R= " << baze.GetRadiusOfBaze() << " H= " << height
<< " P= " << GetArea() << " V= " << GetVolume();
}
我是面向对象编程概念的新手。你能帮我弄清楚我哪里出错了吗?
我无法编译这个,因为我收到错误:
57 : no matching function for call to ‘Circle::Circle()’
14: note: candidate: ‘Circle::Circle(double)’
14: note: candidate expects 1 argument, 0 provided
3: note: candidate: ‘constexpr Circle::Circle(const Circle&)’
3: note: candidate expects 1 argument, 0 provided
62, 70, 91 : lvalue required as left operand of assignment
Cylinder::Cylinder(double r_baze, double h) { baze.GetRadius() = r_baze; height = h; }
在您的 Cylinder
class 中,当您的构造函数被调用时,baze
被隐式初始化为不存在的默认构造函数。
您想使用 initializer list 来处理该初始化,此时您的 Cylinder
构造函数中的代码变得不必要了。
Cylinder::Cylinder(double r_baze, double h)
: baze(r_baze), height(h) {
}
或者,您可以在功能上为 Circle
class 提供默认构造函数,然后 Set
在 Cylinder
的构造函数中提供半径,但这需要更多工作.
Circle::Circle(double r=0.0) {
radius = r;
}
Cylinder::Cylinder(double r_baze, double h) {
baze.Set(r_baze);
height = h;
}
还有...
请注意 GetRadius
returns 一个 double
不能赋值给,所以你会在那行代码上得到一个错误。