[Solved] Polymorphism vs Inheritance. Diffrence?


Here’s a version of your first example, that actually uses polymorphism:

#include <iostream>
#include <string>

class shape
{
public:
    void setValues(int height_, int width_)
    {
        height = height_;
        width = width_;
    }

    virtual int area() = 0;  // This is needed for polymorphism to work

    virtual std::string name() = 0;

protected:
    int height;
    int width;
};

class rectangle : public shape
{
public:
    int area()
    {
        return height * width;
    }

    std::string name()
    {
        return "Rectangle";
    }
};

class triangle :public shape
{
public:
    int area()
    {
        return height * width / 2;
    }

    std::string name()
    {
        return "Triangle";
    }
};

void print_area(shape& poly)
{
    std::cout << poly.name() << ' ' << poly.area() << '\n';
}

int main()
{
    rectangle rect;
    triangle trng;

    rect.setValues(2, 3);
    trng.setValues(5, 4);

    print_area(rect);
    print_area(trng);
}

The first big change is that I declare the virtual function area in the shape class. For polymorphism to work, the functions must be declared in the base class as virtual. The “assignment” to 0 is simply telling the compiler that it’s an abstract function, and the child-classes must override that function.

The second big change is that I use a function to print the area, one that only takes a reference to the base shape class. You must use references or pointers to the base class for polymrphism to work, not use the actual objects directly like in your example.

This works as expected.

solved Polymorphism vs Inheritance. Diffrence?