LINUX.ORG.RU
ФорумTalks

что б такого спросить

 


0

3

Привет, All!!!
Надо поспрашивать потенциальных junior'ов по С++. Если есть - подкиньте интересных вопросов!
Linux при том, что под него пишем.



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от Manhunt

Спасибо, но тухлый ООП я не жалую. Если делать нечего, то можно всякие setWidth, setHeight, и setRadius делать в отдельных классах-друзьях, но это тухлый, тухлый ООП.

Ъ-интерфейс 2D фигуры:

class ДвухмернаяНяшка a where
   area :: Fractional b => a -> b
   perimeter :: Fractional b => a -> b
dmfd
()
Ответ на: комментарий от Manhunt

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

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

qulinxao ★★☆
()
Ответ на: комментарий от Manhunt

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

блин сплошной http://www.infiltec.com/j-h-wrld.htm

в нашей экономике видимо такие плохие программисты как пока ещё не нужны.

qulinxao ★★☆
()
Ответ на: комментарий от wota

с такой логикой можно сразу на Java писать

Классический пример premature optimization. Время исполнения кода в цикле - t_c, время исполнения кода вне цикла t_s. Число шагов цикла N. Общее время: t_s + N t_c. Доля времени t_s, потраченная на abs(a/2): t_s/(t_s+N t_c). Если учесть, что время выполнения abs(a/2) ничтожно по сравнению даже с t_c, процент будет поистине ничтожным.

Но вы, программисты, трудолюбивы, и оптимизируете всё подряд. А двигатель прогресса, как известно - лень.

dmfd
()
Ответ на: комментарий от Manhunt

не не не

в родительском классе всяко нужно предусмотреть трёхмерность(по меньшей мере)

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

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

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)
Ответ на: комментарий от Manhunt

я не крестовик, но

Сразу видно, что кресты ты не практикуешь

дык я сразу и написал

marvin_yorke ★★★
()
Ответ на: комментарий от dmfd

Классический пример premature optimization

нет - классический пример бы затронул алгоритм или взаимодействие двух частей программы

Но вы, программисты, трудолюбивы, и оптимизируете всё подряд

на самом деле я б написал fabs, то я для флейма спорю )

wota ★★
()
Ответ на: комментарий от Manhunt

диалог(обмен информацией неизвестной истенности) двухсторонен.

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

qulinxao ★★☆
()
Ответ на: комментарий от dmfd

и да - код вообще был скопипащен из гугля, я его просто в шаблон завернул

wota ★★
()
Ответ на: комментарий от Manhunt

плохая идея.

Плохая идея - это использовать тухлый ООП вообще.

dmfd
()
Ответ на: комментарий от Manhunt

Не надо, поскольку ни одно из них не является частным случаем другого: инварианты квадрата не верны для прямоугольника (например, равенство сторон), а инварианты прямоугольника не верны для квадрата (например, независимость высоты от ширины).

Сферический оопетушок в вакууме.

aedeph_ ★★
()
Ответ на: комментарий от Manhunt

Так это скорее на ООП, а не на кресты.

1. - это как-бы намекается что требуется абстрактный родитель с виртуальными фунуциями для периметра/площади перегруженными в детях (квадрате и треугольнике)?

Второе вообще не понял, надо специально убиться, но натыкать туда как можно больше всего из STL? Вроде ж кроме как списка/вектора/стэка/чтотамещё ничего не надо.

Kalashnikov ★★★
()
Ответ на: комментарий от wota

нет - не вынес, по крайней мере у меня в gcc 4.71

Скорее всего ты забыл -Ofast, либо куда-то не туда смотришь. У меня (gcc 4.2) получилось 2 цикла:


.file «2.cpp»
.text
.align 2
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB20:
leal 4(%esp), %ecx
.LCFI0:
andl $-16, %esp
pushl -4(%ecx)
.LCFI1:
pushl %ebp
.LCFI2:
movl %esp, %ebp
.LCFI3:
pushl %ecx
.LCFI4:
subl $20, %esp
.LCFI5:
call rand
pushl %eax
fildl (%esp)
addl $4, %esp
fldz
fucomp %st(1)
fnstsw %ax
sahf
ja .L2
fmuls .LC1
movl $1, %eax
fldl -24(%ebp)
fadd %st(1), %st
.p2align 4,,7
.L4:
addl $1, %eax
cmpl $100000000, %eax
fadd %st(1), %st
jne .L4

.L11:
fstp %st(1)
fnstcw -10(%ebp)
movzwl -10(%ebp), %eax
movb $12, %ah
movw %ax, -12(%ebp)
fldcw -12(%ebp)
fistpl -16(%ebp)
fldcw -10(%ebp)
movl -16(%ebp), %eax
addl $20, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.L2:
fmuls .LC2
movl $1, %eax
fldl -24(%ebp)
fadd %st(1), %st
.L6:
addl $1, %eax
cmpl $100000000, %eax
fadd %st(1), %st
jne .L6

jmp .L11
.LFE20:
.size main, .-main
.globl __gxx_personality_v0
.section .rodata.cst4,«aM»,@progbits,4
.align 4
.LC1:
.long 1056964608
.align 4
.LC2:
.long -1090519040
.ident «GCC: (GNU) 4.2.3»
.section .note.GNU-stack,"",@progbits

Manhunt ★★★★★
()
Ответ на: комментарий от wota

сделать их виртуальными - в Square переопределить

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

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 2)
Ответ на: комментарий от Kalashnikov

как-бы намекается что требуется абстрактный родитель

Прямо говорится, что нужен интерфейс и две его реализации.

Второе вообще не понял, надо специально убиться, но натыкать туда как можно больше всего из STL? Вроде ж кроме как списка/вектора/стэка/чтотамещё ничего не надо.

Итераторы еще, и ввод-вывод :) Убиваться не надо, надо просто решить задачу.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

С брезгливостью притронусь к тухлому ООП ещё раз:

struct Rect
struct Rect
{
  float a_, b_;
  virtual void setWidth(float a) {a_ = a;}
  virtual void setHeight(float b) {b_ = b;}
};
 
struct Sqr : Rect
{
  virtual void setWidth(float a) 
  {
    Rect::setWidth(a);
    Rect::setHeight(a);
  }
  virtual void setHeigth(float b) 
  {
    Rect::setWidth(a);
    Rect::setHeight(a);
  }
};
dmfd
()
Ответ на: комментарий от Manhunt

точно, забыл -Ofast, таки выносит, правда делает это красивее, да и сам цикл переворачивает, чтоб вместо трех команд использовать две

wota ★★
()
Ответ на: комментарий от Manhunt

Код, который манипулирует прямоугольником, спятит

этот код должен «понимать», что прямоугольники - они такие, либо работать с отдельным классом, порожденным от Rectangle, который гарантирует независимость сторон друг от друга

wota ★★
()
Ответ на: комментарий от Manhunt

ввод-вывод

[буквоедство] это не STL [/буквоедство]

wota ★★
()
Ответ на: комментарий от marvin_yorke

Да мне пофиг, где они лежат, факт состоит в том, что они являются членами класса и компилятор обязан не допустить такой ситуации, когда вызывается метод объекта, который на самом деле NULL.

buddhist ★★★★★
()
Ответ на: комментарий от Manhunt

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

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

dmfd
()
Ответ на: комментарий от Manhunt

Понятие Rectangle само по себе гарантирует независимость сторон друг от друга.

понятие Rectangle нам гарантирует четыре стороны и четыре прямых угла, Rectangle, который гарантирует независимость сторон - подмножество от Rectangle, как и квадрат

wota ★★
()
Ответ на: комментарий от qulinxao

читай по губам:

для идиотов - 0 и 2 __гарантированы__ везде стандартом, все остальное - конкретные реализации, которые ни с чем не совместимы

wota ★★
()
Ответ на: комментарий от wota

читай С Standard ( любой k&r 89 99 10x?) стек чистит вызывающая сторона - это обязательное свойство любой реализации притизающей на соответствие стандарту.

main - это функция

то что стандартное окружение предоставляет что если есть аргументы то верхний на стеке содержит число последовательностей символов разделённых пробельными последовательностями , а второй список указателей(с гарантированным последним нулевым указателем) на эти слова - это сервис стандартной библиотеки.

так что msg будет выведена на любой реализации которая соответствует стандарту.

qulinxao ★★☆
()
Ответ на: комментарий от wota

отмазка не катит :)

ибо когда C++ выделилось ( до 89) поведение main было в С++ унаследованно из k&r

так что и для С++ код wota in 95% отвечает стандарту

С++ он такой - поэтому его и надо избегать если совсем низы то С если нужны обьекты(и низы) то objC иначе python

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

и даже больше - main может вообще не быть, но две формы main обязаны приниматься - без параметров и с двумя параметрами

wota ★★
()
Ответ на: комментарий от qulinxao

отмазка не катит :)

отмазка - это то, что для C++ надо смотреть стандарт именно С++? ну ладно, пусть будет отмазка

wota ★★
()
Ответ на: комментарий от wota

билин

язык(ни С ни С++) не накладывает никах ограничений на число аргументов функций которые пишет прогер

то что заклинания void main() и int main(int argc,char argv[]) у людей прошивается в подкорку и привело Гослинга и Стила ( который к CL причастен) к пониманию нужности JAVA :(

qulinxao ★★☆
()
Ответ на: комментарий от wota

код (вышепреведённый :

void main(int a,int b, int c, int d,char *msg){
          if(d==1){
                 printf("%s\n",msg);
          }else{
                  main(1,2,3,1,&"Hello wota u in 95%");         
       }
}

соответствует стандарту С++ (любому из принятых)

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

сколько угодно автору конкретного маin

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

true_admin ★★★★★
()
Ответ на: комментарий от qulinxao

соответствует стандарту С++ (любому из принятых)

а что будет в переменных которые не передавались? Мусор со стэка и регистров (если аргументы через регистры кидаются)?

true_admin ★★★★★
()
Ответ на: комментарий от trex6

Нет обращения к полям класса.

к полям объекта тогда уж, не? Я думаю поля класса можно дёргать (если такое есть в плюсах)

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.