#include<iostream> #include<cstring> #include<cstdlib> using namespace std; class RECT{ protected: int x,y; public: RECT(int x1, int y1) { x=x1,y=y1; }; virtual int area() { return x*y; }; int peri() { return 2*x+2*y; }; virtual int isSquare() { if(x==y) return 1; else return 0; }; }; class CUB:public RECT{ private: int height; public: CUB(int x,int y,int h):RECT(x,y) { height=h; }; int volume() { int volume,ar; ar=area(); volume=ar*height; return volume; }; int area() { int ar1,c1; ar1=area(); c1=peri(); return 2*ar1+c1*height; }; int isSquare() { if(isSquare()==1&&height==x) return 1; else return 0; } }; int main(){ int a,b,c; cin>>a>>b>>c; CUB cu(a,b,c); RECT *re; re=&cu; cout<<"volume:"<<cu.volume()<<endl; cout<<"area:"<<re->area()<<endl; if(re->isSquare()) cout<<"cube\n"; else cout<<"not cube\n"; return 0; }
时间: 2024-03-18 18:44:26 浏览: 47
这段代码存在一个问题:
在 CUB 类的 area() 函数和 isSquare() 函数中,分别调用了 area() 和 isSquare() 函数,这样会导致递归调用并最终导致栈溢出。
为了解决这个问题,可以在调用自身的函数前加上类名限定符,例如将 area() 改为 RECT::area(),isSquare() 改为 RECT::isSquare(),这样就可以避免递归调用导致的栈溢出问题。
阅读全文