forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Болтовня (http://forum.boolean.name/forumdisplay.php?f=25)
-   -   Статистический полиморфизм? (http://forum.boolean.name/showthread.php?t=20480)

Program23 15.11.2016 15:06

Статистический полиморфизм?
 
Препод задал вопрос, в какой строчке этого кода (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;
  }


ABTOMAT 15.11.2016 15:33

Ответ: Статистический полиморфизм?
 
Уж не там ли, где ты дописываешь методы show_pulse и show_calories уже после того, как класс описан?

Program23 15.11.2016 15:55

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от ABTOMAT (Сообщение 310123)
Уж не там ли, где ты дописываешь методы show_pulse и show_calories уже после того, как класс описан?

Вот на StackOverflow спросил, там кто-то также сказал, объяснив это тем, что:
"Здесь, статический, потому что конечное действие определяется во время компиляции."

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



И какой же ответ верный?

DarkInside 15.11.2016 16:01

Ответ: Статистический полиморфизм?
 
Ну так преподу и скажи - "Можно предположить, что ... но на самом деле здесь нет никакого полиморфизма, тк ...". Пусть сам выбирает правильный ответ. Чтобы научиться правильно вести демагогию - посмотри прямые линии с Путиным.

Program23 15.11.2016 16:07

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от DarkInside (Сообщение 310126)
Ну так преподу и скажи - "Можно предположить, что ... но на самом деле здесь нет никакого полиморфизма, тк ..."

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

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

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

Преподша сторонница второго варианта.

Knightmare 15.11.2016 21:01

Ответ: Статистический полиморфизм?
 
1. Человек не являющийся хотябы старшим разработчиком в коммерческой софтверной компании не должен вести программирование в универе.
2. Аспирантка имеющая 0 лет опыта коммерческой разработки тем более не должна его вести.
3. Тупа аспирантка трижды не должна вести этот предмет.
4. Полиморфизма там нет от слова совсем, статичный полиморфизм про другое.
5. Два конструктора тоже не являются полиморфизмом.

Randomize 15.11.2016 21:31

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

Дискредитировать методы обучения - не лучшая тактика если нужен зачёт.
И ваще.. старший разработчик больше заработает старшим разработчиком чем учителем - естественно там бестолочь сидит, как будто что-то удивительное.

Knightmare 15.11.2016 21:36

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от Randomize (Сообщение 310135)
Дискредитировать методы обучения - не лучшая тактика если нужен зачёт.

Ну, я успешно это делал, например. Для лулзов могу дать смишной вопрос с развернутым ответом чтобы сломать моск и порвать шаблоны в клочья преподу.
Цитата:

Сообщение от Randomize (Сообщение 310135)
И ваще.. старший разработчик больше заработает старшим разработчиком чем учителем - естественно там бестолочь сидит, как будто что-то удивительное.

В целом да, но обычно это делается для подтягивания толковых студентов в свою компанию до того, как до них доберутся другие. Дефицит как бэ. Ну и кому-то для понтов еще, да.

Program23 15.11.2016 22:55

Ответ: Статистический полиморфизм?
 
Цитата:

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

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

А почему >> является перегруженным оператором сдвига влево?

RegIon 15.11.2016 23:02

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от Program23 (Сообщение 310146)
Господа, вот такой еще ответ предложили. Но что-то я не совсем понимаю, что имеется в виду.

Имеется ввиду, что оператор << принимает параметр разных типов, т.е перегружен
Если верить
http://www.cyberforum.ru/cpp-beginne...ead879692.html
то это есть статический полиморфизм, так как видно заранее, что мы складываем в поток и КОМПИЛЯТОР подставляет реализацию.
Что-то типо такого получается:
Код:

cout.writeStr();
cout.writeInteger();
Cout.endl();

интересно, а если сделать так:
cout << (string) doubleVal;
это статика? Или уже динамика?

Knightmare 16.11.2016 11:08

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


impersonalis 16.11.2016 13:11

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от Knightmare (Сообщение 310160)
Код:

for(int i = 0; i < 1000; i++)
    for(int j = 0; j < 10; j++)
        foo();

Типа вопрос как оптимизировать можно. В целом идея в том, чтобы вложить циклы наоборот, т.к. ничего не изменится в работе, но теоретически меньше инициализаций счетчика будет во вложенном цикле, экономия на спичках, но идею показывает.

Если уж препод решил выпасть на умняк, синтезировав формальный пример, то:
мне думается, что т.к. foo() от i,j не зависит (формально это не показано), то компилятор это в один цикл свернёт, а если результат вызова foo() ещё и ни на что не влияет (что формально надо было бы показать возвратом значения в точку вызова, с последующим учётом этого результата), то вообще - выкинет оба цикла.

mr.DIMAS 16.11.2016 14:29

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

Knightmare 16.11.2016 15:15

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от impersonalis (Сообщение 310162)
Если уж препод решил выпасть на умняк, синтезировав формальный пример, то:
мне думается, что т.к. foo() от i,j не зависит (формально это не показано), то компилятор это в один цикл свернёт, а если результат вызова foo() ещё и ни на что не влияет (что формально надо было бы показать возвратом значения в точку вызова, с последующим учётом этого результата), то вообще - выкинет оба цикла.

Ну, это все так, конечно оптимизирующий компилятор все сделает за тебя и даже лучше часто, но как теория для понимания почему бы и нет. Только надо нормально давать это, а не нести хуйню с умным видом.

DarkInside 16.11.2016 15:22

Ответ: Статистический полиморфизм?
 
Ты у неё спроси, а вот это полиморфизм? :-)
Код:

#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


Randomize 16.11.2016 15:59

Ответ: Статистический полиморфизм?
 
Блин, Чертила, возьми уже плюсы.
Ты со своими диалектами бейсика уже заманал, вот честно.

DarkInside 16.11.2016 16:42

Ответ: Статистический полиморфизм?
 
Не груби! Булка вроде как и основывается на бейсике. Ну ок, не буду ничего писать по прогерству, останется болтовня (веселые картинки, ютуб) и биореактор.

Кирпи4 16.11.2016 17:55

Ответ: Статистический полиморфизм?
 
Уебал бы табуреткой того, кто придумал первым ЯПом преподавать в институтах плюсы. Они сложные, они нелогичные по написанию, много всяких специфичных штук (на самом деле, для шарящих они пихта какие топорные, все просто донельзя). Именно поэтому преподаю детям шарпик (даже без юнити - невероятно, правда?) - он очень приятный, и дети сразу схватывают.

Andvrok 16.11.2016 18:25

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от Кирпи4 (Сообщение 310178)
Именно поэтому преподаю детям шарпик

Спасибо тебе.

impersonalis 16.11.2016 19:56

Ответ: Статистический полиморфизм?
 
Нет... тред не должен скатиться... ээх
Си++ - оч даже логичен, но если уж выбирать, что преподать попроще детям - то уж лучше басик.

mr.DIMAS 16.11.2016 20:36

Ответ: Статистический полиморфизм?
 

Благодаря DarkInside булка снова пахнет программированием, легкий такой запах, до этого воняло из биореактора сами знаете чем

Randomize 16.11.2016 20:51

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от impersonalis (Сообщение 310184)
то уж лучше басик.

После которого так трудно переучивать кадров на что-то, что их кормит, а не только развлекает.
Многие тут решали задачу "вылечить постбейсиковское чернодырие"? Думаю нет.

DarkInside 17.11.2016 07:57

Ответ: Статистический полиморфизм?
 
Цитата:

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

St_AnGer 17.11.2016 11:40

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от Randomize (Сообщение 310186)
После которого так трудно переучивать кадров на что-то, что их кормит, а не только развлекает.
Многие тут решали задачу "вылечить постбейсиковское чернодырие"? Думаю нет.

А я вот, например, после блиц басика сразу на кресты прыгнул. Ну как сразу - раза четыре пытался перепрыгнуть (всё таки Си и производные от него языки после басиков слегка травмируют мозг, особенно доставляет функция "стрельба себе в ногу", недоступная на басиках), на пятый вроде получилось. И ничего, постбейсиковое чернодырие вроде вылечилось.

Цитата:

Сообщение от DarkInside (Сообщение 310200)

Только похоже это мало кому надо. Прямым текстом об этом заявляют.

Не не не, мужик, ты чо. Продолжай, твои вопросы хотя бы читать интересно, мысли какие-то шевелиться даже начинают в голове в поисках ответов на них. Я серьёзно.


Цитата:

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

Ну как, дал преподу ответ? Дюже любопытно что по её мнению будет правильным в данной ситуации :)

ABTOMAT 17.11.2016 13:40

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 310185)

Благодаря DarkInside булка снова пахнет программированием, легкий такой запах, до этого воняло из биореактора сами знаете чем

Это как в туалете попшикали освежителем воздуха.
Раньше просто говном воняло.
Теперь воняет говном и ещё немного апельсином.

Program23 17.11.2016 23:59

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от St_AnGer (Сообщение 310203)

А я вот, например, после блиц басика сразу на кресты прыгнул. Ну как сразу - раза четыре пытался перепрыгнуть (всё таки Си и производные от него языки после басиков слегка травмируют мозг, особенно доставляет функция "стрельба себе в ногу", недоступная на басиках), на пятый вроде получилось. И ничего, постбейсиковое чернодырие вроде вылечилось.



Не не не, мужик, ты чо. Продолжай, твои вопросы хотя бы читать интересно, мысли какие-то шевелиться даже начинают в голове в поисках ответов на них. Я серьёзно.



Ну как, дал преподу ответ? Дюже любопытно что по её мнению будет правильным в данной ситуации :)

Я так особо и не понял, но вроде вот этот оператор "::" в cout'е.:4to: Но я еще потом на лабе поточнее распрошу.

Knightmare 18.11.2016 10:28

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от Program23 (Сообщение 310229)
Я так особо и не понял, но вроде вот этот оператор "::" в cout'е.:4to: Но я еще потом на лабе поточнее распрошу.

Ну это было бы слишком пиздецово. Мне теперь тоже интересен верный ответ по версии препода.

Program23 22.11.2016 19:15

Ответ: Статистический полиморфизм?
 
Код:

using namespace std
я так понял, препод вот эту строчку считает статическим полиморфизмом.

Randomize 22.11.2016 19:41

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от Program23 (Сообщение 310277)
Код:

using namespace std
я так понял, препод вот эту строчку считает статическим полиморфизмом.

Программа полиморфировалась под неймспейс?

Knightmare 22.11.2016 19:42

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от Program23 (Сообщение 310277)
Код:

using namespace std
я так понял, препод вот эту строчку считает статическим полиморфизмом.

Ну тут либо полный пиздос, либо ты слишком толсто троллишь. Я таки ко второму склоняюсь, потому что настолько тупой быть нельзя.

Andvrok 22.11.2016 19:54

Ответ: Статистический полиморфизм?
 
Здесь скорее фалломорфизм уже.

Program23 22.11.2016 20:35

Ответ: Статистический полиморфизм?
 
Я не троллю. Мне одногруппник рассказал, который ходил к ней на защиту лабы:

Преподша дала ему такой же вопрос и он назвал строчку using namespace std.
(говорит, что на лекциях об этом говорила устно, куда я с успехом не ходил)

29 ноября пойду на защиту и, обязательно, подробно расспрошу ее обо всем.

Но я до сих пор не понимаю как пространство имен хоть как-то связано с полиморфизмом. Гугл ничего об этом не говорит.

Knightmare 22.11.2016 20:38

Ответ: Статистический полиморфизм?
 
Цитата:

Сообщение от Program23 (Сообщение 310281)
Я не троллю. Мне одногруппник рассказал, который ходил к ней на защиту лабы:

Преподша дала ему такой же вопрос и он назвал строчку using namespace std.
(говорит, что на лекциях об этом говорила устно, куда я с успехом не ходил)

29 ноября пойду на защиту и, обязательно, подробно расспрошу ее обо всем.

Но я до сих пор не понимаю как пространство имен хоть как-то связано с полиморфизмом. Гугл ничего об этом не говорит.


impersonalis 23.11.2016 12:42

Ответ: Статистический полиморфизм?
 
Ну, в отличии от вопросов происхождения человека и "что автор хотел сказать этим произведением", у тебя есть единственная мотивированная точка зрения - книга Страуструпа. Все прочие фантазии преподов о языке пусть оставляют при себе.

DarkInside 23.11.2016 13:25

Ответ: Статистический полиморфизм?
 
Ну это нормально, у нас преподы вообще любили вместо занятий за жизнь поболтать или часто всё скатывалось к тупому переписыванию материала. А один считал, что вечный двигатель возможен. По дисциплине "Программное обеспечение задач электроснабжения" вместо Matlab\Simulink, ANSYS и LabVIEW изучали офисные пакеты, вставали у доски и рассказывали, чем OpenOffice отличается от MicrosoftOffice. Всё, что я узнал за годы универа, я выучил сам.

Program23 09.12.2016 19:02

Ответ: Статистический полиморфизм?
 
Короче, преподователь сказал, что статический полиморфизм реализуется в неявном виде в строчке: using namespace std.
Типо под одним именем std можно использовать cout, cin и т.д.

Knightmare 09.12.2016 19:39

Ответ: Статистический полиморфизм?
 
Окда, это в каком универе такой высочайший уровень подготовки?

Program23 10.12.2016 05:49

Ответ: Статистический полиморфизм?
 
Уфимский государственный авиационный технический университет

mingw 10.12.2016 07:15

Ответ: Статистический полиморфизм?
 
Мы же этой строчкой тупо меняем окружение... ведь так? Какой нафег полиморфизм? да еще и статический...


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot