假设我有一个形状形状的基类和两个派生类的正方形和圆形 . 现在我想要一个没有指定形状的函数
double foo(shape S)
{
return getArea;
}
但是在打电话时打印正方形的区域
square sq();
foo(sq);
和呼叫时的圆圈区域
circle cr();
foo(cr);
因此,我在基类(仅返回0)和两个派生类中的相应虚函数中声明了 virtual function . 但是,当使用方形或圆形对象调用foo时,我总是得到基类的结果 . 怎么做得好?
编辑:
现在代码正在运行,这是一个简单的例子 . 解决方案确实是通过 reference 从形状类(派生或不派生)传递对象 . 这允许定义一个接受所有类型的派生对象的泛型函数:
#include
using namespace std;
class shape
{
public:
shape (double L_par): L(L_par){};
double getL(){return L;}
virtual double getArea(){return 0;}
private:
const double L;
};
class square: public shape
{
public:
square (double L_par): shape(L_par),area(L_par*L_par){cout<
virtual double getArea(){return area;}
private:
const double area;
};
class circle: public shape
{
public:
circle (double L_par): shape(L_par),area(3.1415*L_par*L_par){cout<
virtual double getArea(){return area;}
private:
const double area;
};
void foo(shape &shp)
{
cout<
cout<
}
int main(int argc, char* argv[])
{
double L=4;
square sq1(L);
circle cr1(L);
foo(sq1);
foo(cr1);
cout<
cout<
return 0;
}