object oriented – Can I say that the code I provided is early/static binding in c++


I wanted to confirm that my code is implementing the concept of static/early binding in c++ or not.Because I know if we don’t use the keyword virtual its early/static binding but still I am not clear so please confirm me that my code is implementing the concept of early/Static binding in c++ or not.

#pragma once
#include<iostream>
#include<string>
using namespace std;
//3 -a) Write a program for simple calculator using Dynamic / Latebinding
class Calculate
{
protected:
    int val1; int val2;
public:
    Calculate()
    {
        cout << "nThe Base class startedn";
    }
    ~Calculate() = default;
    Calculate(int x, int y)
    {
        this->val1 = x;
        this->val2 = y;
    }
    int calculate() 
    {
        return 1;
    };
};
class Add :public Calculate
{
public:
    Add()
    {
        cout << "nThe derived class Addn";
    }
    ~Add() = default;
    Add(int x, int y)
    {
        this->val1 = x;
        this->val2 = y;
    }
    int calculate()
    {
        return val1 + val2;
    }
};
class Sub :public Calculate
{
public:
    Sub()
    {
        cout << "nThe derived class Sub startedn";
    }
    ~Sub() = default;
    Sub(int x, int y)
    {
        this->val1 = x;
        this->val2 = y;
    }
    int calculate()
    {
        return this->val1 - this->val2;
    }
};
class Mul :public Calculate
{
public:
    Mul()
    {
        cout << "nThe derived class Mul startedn";
    }
    ~Mul() = default;
    Mul(int x, int y)
    {
        val1 = x;
        val2 = y;
    }
    int calculate()
    {
        return val1 * val2;
    }
};
class Divide :public Calculate
{
public:
    Divide()
    {
        cout << "nThe derived class Divide startedn";
    }
    ~Divide() = default;
    Divide(int x, int y)
    {
        val1 = x;
        val2 = y;
    }
    int calculate()
    {
        return val1 / val2;
    }
};

void task3a()
{
    Calculate* calculates = nullptr;
    Add add(20, 40);
    calculates = &add;
    cout << "nThe value of addition is: " << calculates->calculate();
    Sub sub(20, 30);
    calculates = &sub;
    cout << "nThe value of subtraction is: " << calculates->calculate();
    Mul mul(20, 30);
    calculates = &mul;
    cout << "nThe value of multiplication is: " << calculates->calculate();
    Divide divide(20, 10);
    calculates = &divide;
    cout << "nThe value of division is: " << calculates->calculate();
}
int main()
{
    task3a();
    return 0;
}