Перегрузка операторов не является статичным полиморфизмом (хотя подумалось что в целом с натяжной и можно наверное, таки тоже во время компиляции выбирается в зависимости от типов аргументов). Если уж хочется упороться по терминологии, то это параметрический полиморфизм (их очень много всяких разных в общем-то, хотя обычно в С++ под полиморфизмом понимается динамичный полиморфизм, т.е. виртуальные функции). Да и вообще мне представляется пиздец тупым дать пример кода, где ответ скрывается в стандартной библиотеке. А в классе pulsometer полиморфизма таки нет никакого. Но что там происходит в головушке у препода я хз, видел например такое в своей жизни. Есть код типа такого:
for(int i = 0; i < 1000; i++)
for(int j = 0; j < 10; j++)
foo();
Типа вопрос как оптимизировать можно. В целом идея в том, чтобы вложить циклы наоборот, т.к. ничего не изменится в работе, но теоретически меньше инициализаций счетчика будет во вложенном цикле, экономия на спичках, но идею показывает. Что написал препод? А вот такую хуйню и орал что именно так и должно быть и это труъ оптимизация, а все тупые:
for(int i = 0; i < 1000; i++)
{
for(int j = 0; j < 10; j++)
{
foo();
}
}
На самом деле вот пример статичного полиморфизма (он не совсем каноничный, но так понятнее зачем это надо и как работает):
#include <stdlib.h>
#include <stdio.h>
template <class T>
class Base
{
public:
void foo()
{
static_cast<T*>(this)->foo();
}
void bar()
{
foo();
}
};
class Derived1 : public Base<Derived1>
{
public:
void foo()
{
printf("Derived1::foo();\n");
}
};
class Derived2 : public Base<Derived2>
{
public:
void foo()
{
printf("Derived2::foo();\n");
}
};
int main()
{
Derived1 a;
Derived2 b;
a.bar();
b.bar();
return 0;
}