我是操作重载的新手。我做了一个实验室,我需要能够显示一个圆的面积和周长。用户输入半径和中心x,y点。我的问题是我迷失了如何正确执行乘法运算过载。有人可以帮助我吗?
这是main.cpp的一部分
cout << "====================================================" << endl;
cout << "Radius is: " << circle1.setRadius << endl;
cout << "Area is: " << circle1.setArea << endl;
cout << "Circumference is: " << circle1.setCircumference << endl;
这是我的circleTypeImp.cpp
#include <iostream>
#include "circleType.h"
#include "pointType.h"
class CircleType;
const float PI = 3.14;
void CircleType::setRadius (float r)
{
float radius const=r;
}
void CircleType::printCircle() const
{
}
void CircleType::setArea ()
{
return PI * radius * radius;
}
void CircleType::setCircumference ()
{
return 2 * PI * radius;
}
这是我的CircleType.h
#ifndef CIRCLETYPE_H
#define CIRCLETYPE_H
#include "pointType.h"
#include <iostream>
using namespace std;
class CircleType : public PointType
{
public:
void setRadius(float r);
void printCircle() const;
CircleType& operator* (const CircleType& radius);
void setArea();
void setCircumference();
private:
float radius const;
};
#endif
谢谢
答案 0 :(得分:0)
根据您的澄清,以下是我可以提出的帮助您的建议。
我已经粘贴并编辑了您的代码,并在我更改了详细信息的原因时添加了注释。
一些要点:
在调用任何函数时,即使是那些没有参数的函数,您仍然需要()
。
返回值的函数不应返回void
,而应返回返回值的类型。 (即以下情况中的float
)。
当您想要设置成员变量时,习惯使用setVariableName
或类似的东西,当您返回成员变量的值(或简单操作时)时,您可以使用{{1 }}
以免混淆功能应该做什么。
您应该避免在头文件(.h / .hpp文件)中使用getVariableName
,以免强制每个人使用您的代码也使用相同的名称空间。
using namespace std
不应声明radius
,因为您希望在创建对象后能够设置它的值。
使用const
时,您经常需要最准确的变量类型表示。您经常可以在PI
中的许多系统上以cmath
(M_PI
)找到此信息。
我没有对#include <cmath>
类或重载的乘法运算符做任何事情。我不知道PointType
类是什么样的,并且似乎没有必要使用乘法运算符。
下面是一个使用此类来说明如何使用成员函数的示例程序。
CircleType.h
PointType
CircleType.cc
#ifndef CIRCLE_TYPE_H
#define CIRCLE_TYPE_H
#include "PointType.h"
#include <iostream>
// It's common practice to not put "using namespace" in a header file.
// If you do, anyone including your header file has to use it.
class CircleType : PointType {
public:
void setRadius(const float r);
void printCircle() const;
CircleType operator * (const circleType& c) const;
float getRadius() const;
float getArea() const;
float getCircumference() const;
private:
float radius; // Note because you want to set radius
// after creation of a circle object
// radius should not be const
}
#endif
main.cc
#include "CircleType.h" // PointType.h will also be included
#include "PointType.h" // But it's also fine to explicitly include it
#include <iostream>
using namespace std;
// you don't need a dummy class here, In fact that will likely cause a compiler issue
// You should probably use a more accurate value of Pi
const float PI = 3.1415927; // Or use M_PI in "cmath" (if it's defined on your system)
void CircleType::setRadius(const float r){
radius = r;
}
void CircleType::printCircle() const {
// Do whatever you need to print a circle
}
// As far as I can tell, you don't actually need to overload
// multiplication to do any the tasks you mentioned.
CircleType CircleType::operator * (const CircleType& c) const {
CircleType tmp;
// I have no clue what multiplying two circles gives you,
// this is the general form of the multiplication operator
return tmp;
}
// It is customary to name a function that returns a private variable
// or the result of simpler operations on private variables with getXXX
// like the ones below -- Note the return type is not void but
// the actual type you expect.
float CircleType::getRadius() const {
return radius;
}
float CircleType::getArea() const {
return PI * radius * radius;
}
float CircleType::getCircumference() const {
return 2 * PI * radius;
}