Показать сообщение отдельно
Старый 16.11.2016, 11:08   #11
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Статистический полиморфизм?

Перегрузка операторов не является статичным полиморфизмом (хотя подумалось что в целом с натяжной и можно наверное, таки тоже во время компиляции выбирается в зависимости от типов аргументов). Если уж хочется упороться по терминологии, то это параметрический полиморфизм (их очень много всяких разных в общем-то, хотя обычно в С++ под полиморфизмом понимается динамичный полиморфизм, т.е. виртуальные функции). Да и вообще мне представляется пиздец тупым дать пример кода, где ответ скрывается в стандартной библиотеке. А в классе 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;
}
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
ABTOMAT (16.11.2016), Gector (18.11.2016), impersonalis (16.11.2016), Randomize (16.11.2016), St_AnGer (16.11.2016)