C++程序,帮忙看看

来源:百度知道 编辑:UC知道 时间:2024/06/01 05:29:23
#include<iostream>
using namespace std;
class Shape
{
public:
virtual double area()=0;

};
class Circle:public Shape
{
public:
Circle(int=2);
virtual double area();
private:
int radius;
};
Circle::Circle(int r)
{
radius=r;
}
double Circle::area()//在类外定义虚函数不需要再加virual
{
return(3.1415*radius*radius);
}
class Square:public Shape
{
public:
Square(int s=2):side(s){}//注意不要忘了{},没有分号
virtual double area(){return side*side;}//注意return后面的分号
private:
int side;
};

void display(const Shape &s)
{
cout<<s.area<<endl;
}
int main()
{

Circle circle(3);
Square square(5);
display(circle);
display(square);
return 0;
}

哪儿错了为什么?
加了括号还是错
cannot convert 'this' pointer from 'const class Shape' to '

一楼答得不对,这种默认参数就应该这么写,没错,真正错误的地方在如下代码中(函数area的调用缺少括号,这样输出的其实是函数地址):
void display(const Shape &s)
{
cout<<s.area<<endl;
}

应该改为:
void display(const Shape &s)
{
cout<<s.area()<<endl;
}

修改一下display函数的定义(const对象只能调用const成员函数),如下:
void display(Shape &s)
{
cout<<s.area()<<endl;
}

Circle(int=2);