Deutsch

кто сил╦н в с++

349  
tormosilka завсегдатай06.10.05 16:19
tormosilka
NEW 06.10.05 16:19 
у меня такой конструктор:
<class zeichen
{private: char _z;
public: zeichen (char z='A') : _z(z) {cout<<'B'<<" "; }
.......
.......
};>
кто смог бы мне это с двоеточием расжувать ? ч╦ тут вообще делается?
#1 
voxel3d Мальчик ветра06.10.05 17:15
voxel3d
NEW 06.10.05 17:15 
в ответ tormosilka 06.10.05 16:19, Последний раз изменено 06.10.05 17:16 (voxel3d)
Проиcxодит инициализация поля _z параметром, переданным в конструктор. Исполняется до захода в тело конструктора.
---
Идиотов и фриков перевоспитать невозможно!
Dropbox - средство синхронизации и бэкапа файлов.
#2 
tormosilka завсегдатай06.10.05 17:19
tormosilka
NEW 06.10.05 17:19 
в ответ voxel3d 06.10.05 17:15
а можно поподробней? плиз
#3 
voxel3d Мальчик ветра06.10.05 17:34
voxel3d
NEW 06.10.05 17:34 
в ответ tormosilka 06.10.05 17:19, Последний раз изменено 06.10.05 17:41 (voxel3d)
В ответ на:
class zeichen {
private:
char _z;
public:
zeichen (char z='A') : _z(z)
{
cout<<'B'<<" ";
}
};

Это конструктор. Он принимает один параметр, который по-умолчанию инициализируется символом 'А'. Далее, до захода в тело конструктора, полe _z инициализируется параметром переданным в конструктор либо значением по-умолчанию ('A'), если таковой не был передан.
Эта конструкция называется списком инициализации, в котором можно либо вызвать конструкторы базовых классов, либо проинициализировать поля класса. При отсутствии списка инициализации, и инициализации полей непосредственно в теле конструктора:
В ответ на:
zeichen (char z='A')
{
_z = z;
cout<<'B'<<" ";
}

будет происходить изменение поля _z дважды, сначала оно примет значение по-умолчанию, в данном случае (т.к. char это POD тип) это будет произвольный мусор, потом в теле конструктора произойдёт присвоение значения, чтобы этого избежать, как раз и применяют списки инициализации.
---
Идиотов и фриков перевоспитать невозможно!
Dropbox - средство синхронизации и бэкапа файлов.
#4 
tormosilka завсегдатай06.10.05 17:47
tormosilka
NEW 06.10.05 17:47 
в ответ voxel3d 06.10.05 17:34
спасибо, это мне надо теперь пожувать...
#5 
voxel3d Мальчик ветра06.10.05 17:50
voxel3d
NEW 06.10.05 17:50 
в ответ voxel3d 06.10.05 17:34, Последний раз изменено 06.10.05 17:53 (voxel3d)
А также, списки инициализации применяют для инициализации полей ссылочных типов, нигде кроме списка инициализации, их нельзя больше проинициализировать.
---
Идиотов и фриков перевоспитать невозможно!
Dropbox - средство синхронизации и бэкапа файлов.
#6 
voxel3d Мальчик ветра06.10.05 18:02
voxel3d
NEW 06.10.05 18:02 
в ответ tormosilka 06.10.05 17:47
спасибо, это мне надо теперь пожувать...
Добирайся быстрее до шаблонов, там получишь настоящее удовольствие.
---
Идиотов и фриков перевоспитать невозможно!
Dropbox - средство синхронизации и бэкапа файлов.
#7 
tormosilka завсегдатай07.10.05 00:01
tormosilka
NEW 07.10.05 00:01 
в ответ voxel3d 06.10.05 18:02
шблоны не раньше как через два месяца... хочу к концу ноября зач╦тку писать
#8 
Cj_Roman посетитель19.10.05 12:28
Cj_Roman
NEW 19.10.05 12:28 
в ответ tormosilka 06.10.05 16:19
Ну нихрена ж себе имена. Венгерскую нотацию не изучали еще наверно
#9 
voxel3d Мальчик ветра19.10.05 13:09
voxel3d
NEW 19.10.05 13:09 
в ответ Cj_Roman 19.10.05 12:28
Хыхы, она, что, стандарт какой-то?
Венгерская нотация имеет смысл когда используется в нетипизированных языках. В С++ все эти lpsz_, p_, ... и тому подобное, только читаемость ухудшают.
---
Идиотов и фриков перевоспитать невозможно!
Dropbox - средство синхронизации и бэкапа файлов.
#10 
Murr коренной житель19.10.05 23:16
Murr
NEW 19.10.05 23:16 
в ответ Cj_Roman 19.10.05 12:28
Венгерская нотация есть венгерская нотация. Как тебе написал Воксель - применение весьма ограничено.
Бо, если у тебя в С++, Java, C# & etc используется венгерская нотация вместо правильной инкапсуляции данных - ты есть вредитель...
У меня в корпоративном кодинг-стандарте прямо записано - поля в бизнес-объектах не могут быть скалярного типа. Вообще не могут... и это - бизнес объекты, ко внутренним полям которых прямого доступа нет - только через проперти, что тоже оговорено...
<--- nobody harmed in this action -->
#11 
voxel3d Мальчик ветра20.10.05 02:03
voxel3d
20.10.05 02:03 
в ответ Murr 19.10.05 23:16
У меня в корпоративном кодинг-стандарте прямо записано - поля в бизнес-объектах не могут быть скалярного типа.
Хм... хм... Почему?
Сначала определимся с тем, что такое скаляр. Итак, погнали:
Кольцо, это множество с заданными на нём бинарными операциями сложения и умножения, которое обладает коммутативностью сложения, ассоциативностью сложения, существование нoля относительно сложения, существование противоположного элемнта относительно сложения, дистрибутивностью.
Полем называется коммутативное ассоциативно кольцо с еденицей, все ненулевые элемнты которого имеют обратный элемент.
Линейным или векторным пространством L над полем P называют множество элементов с бинарными операциями сложения и умножения над элементами поля P, для которых относительно операции сложения выполняется комутативность, ассоциативность, существует ноль, существует противоположный элемент, а для операции умножения выполняется ассоциативность, существует нейтральный элемент и операции сложения и умножения связаны законом дистрибуции.
Элементы пространстрва L называют векторами, а поля P - скалярами.
Короче, о чём это я... (я тут пива попил), так вот, вопрос, что мы подразумеваем под скалярами? Допустим, применительно к C#. Вероятно, исходя из написанного: int, float, double, decimal, sbyte, short, long.
Так вот, почему скаляры не разрешено делать полями бизнес объекта?
---
Идиотов и фриков перевоспитать невозможно!
Dropbox - средство синхронизации и бэкапа файлов.
#12 
Murr коренной житель20.10.05 15:59
Murr
NEW 20.10.05 15:59 
в ответ voxel3d 20.10.05 02:03
Допустим, применительно к C#. Вероятно, исходя из написанного: int, float, double, decimal, sbyte, short, long.
------
using 'string' prohibited too.
Simplest description of situation follow:
- we have two tables in database
- tables have a relation
- we have a buisnes objects (BO) to represents bouth tables...
In BO code some lamers try assign a foreign key to field of primary key and save a record...
To prevent this action primary key field must have PrimaryKey type and foreign key - ForeignKey type. Assigment operation are allowed only for foreign key. Of course bouth of the types are based on Key type, which contain int, or long, or string field, but all three types are defined outside BO area...
In case that some of fields shuld be wrapped - we wrap all of the scalars types...
<--- nobody harmed in this action -->
#13