在C++中输入类型

Phi*_*rip -4 c++

我对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)

其中半径得到错误"错误:标识符"半径"未定义.任何建议?

Ker*_* SB 5

这与铸造无关.(无论如何,你通常不应该投掷任何东西.)

你忘了函数调用括号和参数:

double radi = Circle_getRadius(_this);
//                            ^^^
Run Code Online (Sandbox Code Playgroud)

(函数名本身也是一个值,但它的类型是函数指针类型,即类型double (*)(Circle *).)

这假设a Shape*可以转换为a Circle*,这似乎不太可能.你可以把一个投射到另一个(通过说static_cast<Circle*>(_this),并假设Circle从(非虚拟)派生Shape),但正如我所说,你通常不应该这样做,它可能不正确.


Mat*_*son 5

对此的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++中,编译代码时对象必须存在函数.