题目链接:https://www.nowcoder.com/practice/699ba050e2704591ae3e62401a856b0e?tpId=107&&tqId=33421&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking
看了那么多答案,这个应该是最标准的,既用到了初始化列表很高端的写法,又实现了虚函数重写,实现了多态
#include<iostream> using namespace std; class shape{ private: int x; int y; public: shape() : x(0), y(0){ } shape(int a, int b) : x(a), y(b){ } virtual void GetArea() = 0; }; class Circle : public shape{ private: double radius; const static double PI; public: Circle() : radius(0) { } Circle(int r) : radius(r) { } virtual void GetArea(){ double S; S = PI * radius * radius; cout << S << endl; } }; const double Circle::PI = 3.14; class Retangle : public shape{ private: int w; int h; public: Retangle() : w(0), h(0){ } Retangle(int x, int y) : w(x), h(y){ } virtual void GetArea(){ double S; S = w * h; cout << S << endl; } }; class Square : public Retangle{ private: int a; public: Square() : a(0){ } Square(int x) : a(x){ } virtual void GetArea(){ double S; S = a * a; cout << S << endl; } }; int main(){ int a, b, c, d; cin >> a >> b >> c >> d; Retangle re(a, b); Circle C(c); Square s(d); shape* p; p = &re; p->GetArea(); p = &C; p->GetArea(); p = &s; p->GetArea(); return 0; }