#include <iostream>
#include <fstream>
using namespace std;
class Shape{
private:
    int width, length;
public:
    Shape() {}
    Shape(int _width, int _length) {
        width = _width;
        length = _length;
    }
    virtual int get_area() = 0; // only signature, the function will be written inside the derived classes
    int get_widht() {
        return width;
    }
    int get_length() {
        return  length;
    }
};
class Rectangle : public Shape {
public:
    Rectangle(int width, int length) : Shape(width, length) {
        
    }
    int get_area() override {
        return get_length() * get_widht();
    }
};
class Square : public Shape {
public:
    Square(int width, int length) : Shape(width, length) {
        
    }
    int get_area() override {
        return get_length() * get_widht();
    }
};
int main(){
    Shape *rect = new Rectangle(4, 5);
    Shape *square = new Square(5, 5);
    
    cout << rect->get_area() << endl;
    cout << square -> get_area() << endl;
    return 0;
}
