我对C++很新,我不确定如何正确地输入,或者我不确定如何在这个方法中转换参数可能需要类型转换.
我有一个函数getRadius
double Circle_getRadius(Circle* _this)
{
return _this->radius;
}
Run Code Online (Sandbox Code Playgroud)
我想在getArea方法中使用this方法,如下所示
double Circle_area(Shape* _this)
{
const double PI = 3.1415927;
double radi = Circle_getRadius;
return PI * radi * radi;
}
Run Code Online (Sandbox Code Playgroud)
我在Circle_getRadius下得到一个错误,说"错误:类型的值"double()(Circle _this)"不能用于初始化"double"类型的实体.这是什么意思?
我也尝试过这个错误
double Circle_area(Shape* _this)
{
const double PI = 3.1415927;
return PI * radius * radius;
}
Run Code Online (Sandbox Code Playgroud)
其中半径得到错误"错误:标识符"半径"未定义.任何建议?
这与铸造无关.(无论如何,你通常不应该投掷任何东西.)
你忘了函数调用括号和参数:
double radi = Circle_getRadius(_this);
// ^^^
Run Code Online (Sandbox Code Playgroud)
(函数名本身也是一个值,但它的类型是函数指针类型,即类型double (*)(Circle *).)
这假设a Shape*可以转换为a Circle*,这似乎不太可能.你可以把一个投射到另一个(通过说static_cast<Circle*>(_this),并假设Circle从(非虚拟)派生Shape),但正如我所说,你通常不应该这样做,它可能不正确.
对此的ACTUAL解决方案是具有类层次结构,其中虚函数GetArea知道如何计算对象本身的大小.
获得radius正方形或三角形是没有意义的,计算圆形,三角形或正方形的面积都是不同的.
class Shape
{
public:
virtual double GetArea() = 0;
};
class Circle: public Shape
{
private:
double radius;
public:
Circle(double r) : radius(r) {}
double GetArea() { return radius * radius * PI; }
};
class Square : public Shape
{
private:
double side;
public:
Square(double s) : side(s) {}
double GetArea() { return side * side; }
};
Run Code Online (Sandbox Code Playgroud)
...我会让你弄清楚如何做三角形,矩形,省略号等.
然后我们可以做这样的事情:
Shape& x = Circle(3.5)
Shape& y = Square(5);
cout << x.GetArea() << " " << y.GetArea() << endl;
Run Code Online (Sandbox Code Playgroud)
您的代码看起来有点像您希望C++像Python或PHP一样运行,其中对象的函数调用在运行时得到解析.在C++中,编译代码时对象必须存在函数.
| 归档时间: |
|
| 查看次数: |
404 次 |
| 最近记录: |