|
Болтовня Разговоры на любые темы (думайте, о чем пишите) |
15.11.2016, 15:06
|
#1
|
Бывалый
Регистрация: 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;
}
|
(Offline)
|
|
15.11.2016, 15:33
|
#2
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Статистический полиморфизм?
Уж не там ли, где ты дописываешь методы show_pulse и show_calories уже после того, как класс описан?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
15.11.2016, 15:55
|
#3
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Статистический полиморфизм?
Сообщение от ABTOMAT
Уж не там ли, где ты дописываешь методы show_pulse и show_calories уже после того, как класс описан?
|
Вот на StackOverflow спросил, там кто-то также сказал, объяснив это тем, что:
"Здесь, статический, потому что конечное действие определяется во время компиляции."
Но его минусанули, и правильным ответом выбрали:
"Здесь нет никакого полиморфизма: ни статического, ни динамического. Здесь нет ни наследования, ни перегруженных функций, ни шаблонных функций.
Полиморфизм означает много форм.
Здесь же имеется один класс - одна форма. Здесь есть лишь статическое связывание вызовов методов класса с объектом, имеющим статический тип данного класса."
И какой же ответ верный?
|
(Offline)
|
|
15.11.2016, 16:01
|
#4
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Статистический полиморфизм?
Ну так преподу и скажи - "Можно предположить, что ... но на самом деле здесь нет никакого полиморфизма, тк ...". Пусть сам выбирает правильный ответ. Чтобы научиться правильно вести демагогию - посмотри прямые линии с Путиным.
|
(Offline)
|
|
15.11.2016, 16:07
|
#5
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Статистический полиморфизм?
Сообщение от DarkInside
Ну так преподу и скажи - "Можно предположить, что ... но на самом деле здесь нет никакого полиморфизма, тк ..."
|
Она еб*тая молодая, ведет ООП и заставляет ходить на copy-paste лекции, на защите вместо кода дрючит сухой теорией и при этом задавая тупые вопросы.
А вот интересно: два конструктора в одном классе являются примером полиморфизма или нет?
Поштудировав интернет источники, я пришел к выводу, что есть два мнения:
1) да
2) нет, но многие считают это полиморфизмом.
Преподша сторонница второго варианта.
|
(Offline)
|
|
15.11.2016, 21:01
|
#6
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: Статистический полиморфизм?
1. Человек не являющийся хотябы старшим разработчиком в коммерческой софтверной компании не должен вести программирование в универе.
2. Аспирантка имеющая 0 лет опыта коммерческой разработки тем более не должна его вести.
3. Тупа аспирантка трижды не должна вести этот предмет.
4. Полиморфизма там нет от слова совсем, статичный полиморфизм про другое.
5. Два конструктора тоже не являются полиморфизмом.
|
(Offline)
|
|
Эти 8 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
|
|
15.11.2016, 21:31
|
#7
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,356
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Статистический полиморфизм?
Похоже эта задача на знание "трепонтни", а не программирования:
сводится к тому, чтоб показывая на любую строчку зачитать первый абзац википедии.
Показывай на места со статическими методами - там хоть 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 за это полезное сообщение:
|
|
15.11.2016, 21:36
|
#8
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: Статистический полиморфизм?
Сообщение от Randomize
Дискредитировать методы обучения - не лучшая тактика если нужен зачёт.
|
Ну, я успешно это делал, например. Для лулзов могу дать смишной вопрос с развернутым ответом чтобы сломать моск и порвать шаблоны в клочья преподу.
Сообщение от Randomize
И ваще.. старший разработчик больше заработает старшим разработчиком чем учителем - естественно там бестолочь сидит, как будто что-то удивительное.
|
В целом да, но обычно это делается для подтягивания толковых студентов в свою компанию до того, как до них доберутся другие. Дефицит как бэ. Ну и кому-то для понтов еще, да.
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
|
|
15.11.2016, 22:55
|
#9
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Статистический полиморфизм?
Во всех подобных строчках (оператор << перегружен): cout << "Таймер: " << timer << endl;
|
Господа, вот такой еще ответ предложили. Но что-то я не совсем понимаю, что имеется в виду.
UPD Посоветовали книгу Бьерн Страуструп. Язык программирования С++
То есть, такие операторы как "+, *, <<" будут относиться к перегрузке оператора функции? Например "+", имеет одно имя, но используется для сложения целых чисел, чисел с плавающей точкой, и указателей. Следовательно, в моем коде, + и >> - являются примером статического полиморфизма?
А почему >> является перегруженным оператором сдвига влево?
|
(Offline)
|
|
15.11.2016, 23:02
|
#10
|
Элита
Регистрация: 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;
это статика? Или уже динамика?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.11.2016, 11:08
|
#11
|
Дэвелопер
Регистрация: 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 за это полезное сообщение:
|
|
16.11.2016, 13:11
|
#12
|
Зануда с интернетом
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.11.2016, 14:29
|
#13
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Статистический полиморфизм?
Вот из-за этого я пошел на оптика учиться, а не на программера. Спорить по очевидным вещам с ебнутыми преподами не хотелось.
__________________
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
|
|
16.11.2016, 15:15
|
#14
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: Статистический полиморфизм?
Сообщение от impersonalis
Если уж препод решил выпасть на умняк, синтезировав формальный пример, то:
мне думается, что т.к. foo() от i,j не зависит (формально это не показано), то компилятор это в один цикл свернёт, а если результат вызова foo() ещё и ни на что не влияет (что формально надо было бы показать возвратом значения в точку вызова, с последующим учётом этого результата), то вообще - выкинет оба цикла.
|
Ну, это все так, конечно оптимизирующий компилятор все сделает за тебя и даже лучше часто, но как теория для понимания почему бы и нет. Только надо нормально давать это, а не нести хуйню с умным видом.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
|
|
16.11.2016, 15:22
|
#15
|
Разработчик
Регистрация: 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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:22.
|