Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Общие темы > Болтовня

Болтовня Разговоры на любые темы (думайте, о чем пишите)

Ответ
 
Опции темы
Старый 15.11.2016, 15:06   #1
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Статистический полиморфизм?

Препод задал вопрос, в какой строчке этого кода (C++) реализуется статический полиморфизм?

  #include"stdafx.h"
  #include<iostream>
  #include<clocale>
  #include<conio.h>
  #include<ctime>
  
  using namespace std;
  
  class pulsometer
  {
  public:
  int pulse;
  int calories;
  int timer;
  void show_pulse(void);
  void show_calories(void);
  
  void show_timer() 
  {
         cout << "Таймер: " << timer << endl;
  }
  
  void start_timer()
  {
         timer = 10;
  }
  
  };
  
  void pulsometer::show_pulse(void)
  
  {
  pulsometer::pulse = rand() % 45 + 90;
  cout << "Пульс: " << pulse << endl;
  }
  
  void pulsometer::show_calories(void)
  
  {
  pulsometer::calories = rand() % 1000;
  cout << "Сожжено: " << calories << " ККал" <<  endl;
  }
  
  int_tmain(intargc, _TCHAR* argv[])
  {
         setlocale(0,"");
         srand( time( 0 ) );
              pulsometer polar;
  
         polar.start_timer();
         polar.show_timer();
  
         polar.show_pulse();
         polar.show_calories();
  
  _getch();
  return 0;
  }
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 15:33   #2
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Статистический полиморфизм?

Уж не там ли, где ты дописываешь методы show_pulse и show_calories уже после того, как класс описан?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 15:55   #3
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Статистический полиморфизм?

Сообщение от ABTOMAT Посмотреть сообщение
Уж не там ли, где ты дописываешь методы show_pulse и show_calories уже после того, как класс описан?
Вот на StackOverflow спросил, там кто-то также сказал, объяснив это тем, что:
"Здесь, статический, потому что конечное действие определяется во время компиляции."

Но его минусанули, и правильным ответом выбрали:
"Здесь нет никакого полиморфизма: ни статического, ни динамического. Здесь нет ни наследования, ни перегруженных функций, ни шаблонных функций.
Полиморфизм означает много форм.
Здесь же имеется один класс - одна форма. Здесь есть лишь статическое связывание вызовов методов класса с объектом, имеющим статический тип данного класса."



И какой же ответ верный?
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 16:01   #4
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Статистический полиморфизм?

Ну так преподу и скажи - "Можно предположить, что ... но на самом деле здесь нет никакого полиморфизма, тк ...". Пусть сам выбирает правильный ответ. Чтобы научиться правильно вести демагогию - посмотри прямые линии с Путиным.
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 16:07   #5
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Статистический полиморфизм?

Сообщение от DarkInside Посмотреть сообщение
Ну так преподу и скажи - "Можно предположить, что ... но на самом деле здесь нет никакого полиморфизма, тк ..."
Она еб*тая молодая, ведет ООП и заставляет ходить на copy-paste лекции, на защите вместо кода дрючит сухой теорией и при этом задавая тупые вопросы.

А вот интересно: два конструктора в одном классе являются примером полиморфизма или нет?

Поштудировав интернет источники, я пришел к выводу, что есть два мнения:
1) да
2) нет, но многие считают это полиморфизмом.

Преподша сторонница второго варианта.
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 21:01   #6
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Статистический полиморфизм?

1. Человек не являющийся хотябы старшим разработчиком в коммерческой софтверной компании не должен вести программирование в универе.
2. Аспирантка имеющая 0 лет опыта коммерческой разработки тем более не должна его вести.
3. Тупа аспирантка трижды не должна вести этот предмет.
4. Полиморфизма там нет от слова совсем, статичный полиморфизм про другое.
5. Два конструктора тоже не являются полиморфизмом.
(Offline)
 
Ответить с цитированием
Эти 8 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
ABTOMAT (15.11.2016), Andvrok (16.11.2016), Кирпи4 (16.11.2016), Gector (18.11.2016), mr.DIMAS (15.11.2016), Mr_F_ (15.11.2016), RegIon (15.11.2016), St_AnGer (16.11.2016)
Старый 15.11.2016, 21:31   #7
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Статистический полиморфизм?

Похоже эта задача на знание "трепонтни", а не программирования:
сводится к тому, чтоб показывая на любую строчку зачитать первый абзац википедии.
Показывай на места со статическими методами - там хоть 1 слово совпадает с темой вопроса.

Дискредитировать методы обучения - не лучшая тактика если нужен зачёт.
И ваще.. старший разработчик больше заработает старшим разработчиком чем учителем - естественно там бестолочь сидит, как будто что-то удивительное.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 7 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
ABTOMAT (15.11.2016), Andvrok (16.11.2016), Gector (18.11.2016), mingw (17.11.2016), Mr_F_ (15.11.2016), Phantom (17.11.2016), St_AnGer (16.11.2016)
Старый 15.11.2016, 21:36   #8
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Статистический полиморфизм?

Сообщение от Randomize Посмотреть сообщение
Дискредитировать методы обучения - не лучшая тактика если нужен зачёт.
Ну, я успешно это делал, например. Для лулзов могу дать смишной вопрос с развернутым ответом чтобы сломать моск и порвать шаблоны в клочья преподу.
Сообщение от Randomize Посмотреть сообщение
И ваще.. старший разработчик больше заработает старшим разработчиком чем учителем - естественно там бестолочь сидит, как будто что-то удивительное.
В целом да, но обычно это делается для подтягивания толковых студентов в свою компанию до того, как до них доберутся другие. Дефицит как бэ. Ну и кому-то для понтов еще, да.
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
ABTOMAT (15.11.2016), Andvrok (16.11.2016), Gector (18.11.2016), Mr_F_ (15.11.2016), St_AnGer (16.11.2016)
Старый 15.11.2016, 22:55   #9
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Статистический полиморфизм?

Во всех подобных строчках (оператор << перегружен): cout << "Таймер: " << timer << endl;
Господа, вот такой еще ответ предложили. Но что-то я не совсем понимаю, что имеется в виду.

UPD
Посоветовали книгу Бьерн Страуструп. Язык программирования С++
То есть, такие операторы как "+, *, <<" будут относиться к перегрузке оператора функции? Например "+", имеет одно имя, но используется для сложения целых чисел, чисел с плавающей точкой, и указателей. Следовательно, в моем коде, + и >> - являются примером статического полиморфизма?

А почему >> является перегруженным оператором сдвига влево?
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 23:02   #10
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Статистический полиморфизм?

Сообщение от Program23 Посмотреть сообщение
Господа, вот такой еще ответ предложили. Но что-то я не совсем понимаю, что имеется в виду.
Имеется ввиду, что оператор << принимает параметр разных типов, т.е перегружен
Если верить
http://www.cyberforum.ru/cpp-beginne...ead879692.html
то это есть статический полиморфизм, так как видно заранее, что мы складываем в поток и КОМПИЛЯТОР подставляет реализацию.
Что-то типо такого получается:
cout.writeStr();
cout.writeInteger();
Cout.endl();
интересно, а если сделать так:
cout << (string) doubleVal;
это статика? Или уже динамика?
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Program23 (16.11.2016)
Старый 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)
Старый 16.11.2016, 13:11   #12
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Статистический полиморфизм?

Сообщение от Knightmare Посмотреть сообщение
for(int i = 0; i < 1000; i++)
    for(int j = 0; j < 10; j++)
        foo();
Типа вопрос как оптимизировать можно. В целом идея в том, чтобы вложить циклы наоборот, т.к. ничего не изменится в работе, но теоретически меньше инициализаций счетчика будет во вложенном цикле, экономия на спичках, но идею показывает.
Если уж препод решил выпасть на умняк, синтезировав формальный пример, то:
мне думается, что т.к. foo() от i,j не зависит (формально это не показано), то компилятор это в один цикл свернёт, а если результат вызова foo() ещё и ни на что не влияет (что формально надо было бы показать возвратом значения в точку вызова, с последующим учётом этого результата), то вообще - выкинет оба цикла.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (18.11.2016)
Старый 16.11.2016, 14:29   #13
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Статистический полиморфизм?

Вот из-за этого я пошел на оптика учиться, а не на программера. Спорить по очевидным вещам с ебнутыми преподами не хотелось.
__________________

(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
ABTOMAT (16.11.2016), Gector (18.11.2016), St_AnGer (16.11.2016)
Старый 16.11.2016, 15:15   #14
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Статистический полиморфизм?

Сообщение от impersonalis Посмотреть сообщение
Если уж препод решил выпасть на умняк, синтезировав формальный пример, то:
мне думается, что т.к. foo() от i,j не зависит (формально это не показано), то компилятор это в один цикл свернёт, а если результат вызова foo() ещё и ни на что не влияет (что формально надо было бы показать возвратом значения в точку вызова, с последующим учётом этого результата), то вообще - выкинет оба цикла.
Ну, это все так, конечно оптимизирующий компилятор все сделает за тебя и даже лучше часто, но как теория для понимания почему бы и нет. Только надо нормально давать это, а не нести хуйню с умным видом.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
Gector (18.11.2016), impersonalis (16.11.2016)
Старый 16.11.2016, 15:22   #15
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Статистический полиморфизм?

Ты у неё спроси, а вот это полиморфизм?
#define isdog 1
#define iscat 2


Type animal
    Public:
    speak As Sub()
    Declare Constructor (anid As Integer)    
End Type

'Speak метод для объекта dog(собаки)
Sub Bark()
    Print "Woof!"
End Sub

'Speak метод для объекта cat(кошки)
Sub Meow()
    Print "Meow!"
End Sub

'Установим указатель правильного метода, основанный на id животного
Constructor animal(anid As Integer)
    If anid = isdog Then
        this.speak = @Bark
    ElseIf anid = iscat Then
        this.speak = @Meow
    End If
End Constructor

'Создание объектов dog и cat
Dim myDog As animal = isdog
Dim mycat As animal = iscat

'Вывод того, что произносят животные
Print "My dog says ";
myDog.speak()
Print "My cat says ";
myCat.speak()

Sleep
End

Последний раз редактировалось DarkInside, 16.11.2016 в 16:37.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 18:11.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com