ПрограммированиеФорумОбщее

C++: каждый класс в своём модуле. В чём прикол? (20 стр)

Страницы: 119 20 21 2226 Следующая »
#285
3:10, 15 мар 2012

TelVolt
> По стандарту всякие +=, -=, <<=, &= - тоже операторы присваивания.
это составные операторы присваивания. Все-таки разные вещи.
Например += означает, что сначала производится операция сложения, а потом операция присваивания.

А вот то что в дельфи нет составных операторов присваивания, это действительно, упущение.

#286
3:14, 15 мар 2012

yatagarasu
> Feo
> не игнорируй меня, наруш НДА, расскажи что за драйвера )
дрова для работы с сетевыми дисками по протоколам iscsi и fibrechannel.

#287
3:15, 15 мар 2012

yatagarasu
Кстати, у меня можно написать
SETTER(int,setx)
SETTER(float,setfloat)
SETTER(chert_v_stupe,setchert_v_stupe)
И таким образом у меня будут работать разные сеттеры в коде вида
x=10;
x=3.14;
x=chert_v_stupe();
А у тебя только то, что ты указал изначально.
Чтобы добиться такой же гибкости, тебе придётся всю её засовывать в класс, к которому принадлежит свойство.
У меня он описывается автоматом.

#288
3:18, 15 мар 2012

TelVolt
нет, можно было сделать проще.

#289
3:18, 15 мар 2012

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

#290
3:20, 15 мар 2012

TelVolt
не надо принимать этот код за способ реализации свойств в си++. это просто говнокод. ничего личного.

#291
3:31, 15 мар 2012

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

А как, по вашему, свойства должны выглядеть? Безотносительно реализации их текущими средствами языка, чисто идеологически? Как они должны, например, присваиваться - можно ли иметь несколько сеттеров, как их имеет поле, можно ли брать от свойств адрес, как должны присваивания по нему обрабатываться - через один вызов сеттера или он должен вызываться на каждую операцию, должен ли быть способ задать или, наоборот, запретить для них ++, --, +=, etc?

#292
3:32, 15 мар 2012

yatagarasu
Например?

#293
3:48, 15 мар 2012

TelVolt
> А как, по вашему, свойства должны выглядеть? Безотносительно реализации их
> текущими средствами языка, чисто идеологически? Как они должны, например,
> присваиваться - можно ли иметь несколько сеттеров, как их имеет поле, можно ли
> брать от свойств адрес, как должны присваивания по нему обрабатываться - через
> один вызов сеттера или он должен вызываться на каждую операцию, должен ли быть
> способ задать или, наоборот, запретить для них ++, --, +=, etc?
Я считаю что свойству можно задать потокобезопасность, возможность присваивания, вид присвоения, геттер сеттер без реализации и тому подобное, что реализовано в ObjC. Из всего, что я видел, в нем самые идеальные свойства.

#294
3:51, 15 мар 2012

TelVolt
> yatagarasu
> Например?
если говорить именно о майкрософте, то (могу немножко напутать, лень гуглить)

__declspec(property(get=getData, set=setData)) int Data;

но тут требуется реализация методов getData() и setData().

#295
10:05, 15 мар 2012

Pushkoff
> оно сразу становится нечитаемым
> тем более в таком виде
> array.size = 10;

REALLY ?
прям вообще не читабельно, да ????


Feo
> Может я тебя удивлю, но можно писать одно приложение на трёх языках: C++ + C# +
> Managed C++. Или даже заморочиться и написать на четырех языках: C + C++ + ObjC
> + ObjC++.

господи, какие же вы людишки не понятливые
ИДЕНТИЧНЫЕ приложения (то есть одинаково выглядящие для пользователя и выполняющие одинаковый функционал). Только на двух разных языках. На С++ и на C# например. Только так можно сравнить, что круче

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

#296
10:17, 15 мар 2012

Feo
> Из всего, что я видел, в нем самые идеальные свойства.

есть свойства лиспа, однако :)

#297
11:41, 15 мар 2012

Я считаю, что свойства должны работать так:

obj.Vec=Vector(7, 4, 1); //Эквивалентно setVec(Vector(7, 4, 1))
obj.Vec.x+=43; //Эквивалентно коду ниже

Vector value=obj.getVec();
value.x+=43;
obj.setVec(value);

То есть свойство при использовании составного оператора присваивания должно неявно вызывать геттер, изменять полученное значение, потом вызывать сеттер. Тогда свойство будет себя вести как поле, и его можно изменять как угодно. Жалко, что это нельзя реализовать на C++.

#298
12:14, 15 мар 2012

gammaker
> obj.Vec.x+=43; //Эквивалентно коду ниже

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

Vector tmpVec = obj.getVec();
int tmpX = tmpVec.getX();
tmpX += 43;
tmpVec.setX(tmpX);
obj.setVec(tmpVec);

Ой-ей! Простая с виду операция, которая с виду должна транслироваться в одну машинную команду (add dword ptr [401231h], 43) вдруг развернулась в 4 функции, две временные переменные,  две аллокации памяти, конструктор копирования. Нет, спасибо.

#299
12:18, 15 мар 2012

innuendo
> есть свойства лиспа, однако :)
их я не видел, нужно глянуть :)

Страницы: 119 20 21 2226 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.