Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация, определение и конструкторы 
V
    Опции темы
Gunslinger
Дата 29.12.2009, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3




1.    Инициализация – вызов конструктора (по\не по умолчанию)?
2.    Определение – обычное присваивание?
3.    Когда через конструктор присваиваем внутренним переменным значение, используется =. В чем тогда разница между определением? 
4.    Инициализация по умолчанию производится для каких встроенных типов?

PM MAIL   Вверх
mes
Дата 29.12.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  29.12.2009,  08:23 Найти цитируемый пост)
1.    Инициализация – вызов конструктора (по\не по умолчанию)?

конструктор есть только у классовых типов, инициализация же есть у всех.

Цитата(Gunslinger @  29.12.2009,  08:23 Найти цитируемый пост)
2.    Определение – обычное присваивание?

Определение переменной это выделение памяти под нее, а описание это просто упоминание.

Цитата(Gunslinger @  29.12.2009,  08:23 Найти цитируемый пост)
Когда через конструктор присваиваем внутренним переменным значение, используется =. В чем тогда разница между определением? 

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

Цитата(Gunslinger @  29.12.2009,  08:23 Найти цитируемый пост)
4.    Инициализация по умолчанию производится для каких встроенных типов?

для всех простых (POD) типов объекты которых определены статически.




Это сообщение отредактировал(а) mes - 29.12.2009, 11:11


--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 29.12.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



У Мейерса есть такой пример, немного изменил:
Код

class NameObject{
public:
   NameObject(const string& name, const& numb);

private:
    string nameVale;
    int iVale;
};
...
NameObject no1("blablabla",2);

Не пишет, что будет ошибка. Получается при создании no1 для свойств не произошло вызова их конструкторов по умолчанию, это было только объявление. Их инициализация (или определение?) было произведено в конструкторе объекта.
PM MAIL   Вверх
mes
Дата 29.12.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  29.12.2009,  13:22 Найти цитируемый пост)
Не пишет, что будет ошибка. Получается при создании no1 для свойств не произошло вызова их конструкторов по умолчанию, это было только объявление. Их инициализация (или определение?) было произведено в конструкторе объекта. 

 smile  smile  smile 
Вы смешали все кучу.. тут даже не понятно с какой стороны начинать распутывать..
 smile 


--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 29.12.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Код

MyType type;    

Если в конструкторе по умолчанию происходит присваивание внутренним переменным значения, то они сразу же получат значения. Получается, это объявление и инициализация. Технически: выделяется память и туда записывается соответствующее значение.
Код

string nameVale;
int iVale;
 

1. По аналогии переменные встроенного типа так же объявлены, а затем автоматически инициализированы. Но это оказывается не так.
2. Инициализация – это ведь тоже присвоение значения, т.е. память выделяется и в нее записывается какое-либо значение. В чем тогда отличие от определения?



Это сообщение отредактировал(а) Gunslinger - 29.12.2009, 16:56
PM MAIL   Вверх
artsb
Дата 29.12.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(Gunslinger @  29.12.2009,  16:49 Найти цитируемый пост)
2. Инициализация – это ведь тоже присвоение значения, т.е. память выделяется и в нее записывается какое-либо значение. В чем тогда отличие от определения?

Инициализация - это когда вы явно присвоили значение переменной при объявлении.
Определение - это просто объявление переменной. И она никак не инициализируется, если речь идёт о базовых типах. Т.е.
Код

int b = 0; // инициализация нулём
int c;       // в переменной может быть всё что угодно - мусор

В случае с классом - вызывается его конструктор, который инициализирует переменные класса.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mes
Дата 29.12.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



extern type val; // описание объявление переменной - просто упоминание
type val; // определение переменной  - выделение места с возможной инициализацией
type val = 4;  // определение переменной с явной инициализаций
val = 5;  // присвоение

Добавлено @ 18:33
Цитата(Gunslinger @  29.12.2009,  15:49 Найти цитируемый пост)
Инициализация – это ведь тоже присвоение значения,

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

Добавлено @ 18:37
Цитата(artsb @  29.12.2009,  16:37 Найти цитируемый пост)
Инициализация - это когда вы явно присвоили значение переменной при объявлении.

не объявлении, а при определении.. и это явная инициализация, а может быть неявная.. и "присвоили" здесь не несет смысл присвоения.

Цитата(artsb @  29.12.2009,  16:37 Найти цитируемый пост)
Определение - это просто объявление переменной.

неа smile


Это сообщение отредактировал(а) mes - 29.12.2009, 19:08


--------------------
PM MAIL WWW   Вверх
artsb
Дата 29.12.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(mes @  29.12.2009,  18:30 Найти цитируемый пост)
не объявлении, а при определении

а в чём разница?

Цитата(mes @  29.12.2009,  18:30 Найти цитируемый пост)
неа


Цитата(mes @  29.12.2009,  18:30 Найти цитируемый пост)
type val; // определение переменной

type val; - это же объявление переменной.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mes
Дата 29.12.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(artsb @  29.12.2009,  17:44 Найти цитируемый пост)

type val; - это же объявление переменной. 


для переменных объявление происходит посредством употребления extern. smile


Это сообщение отредактировал(а) mes - 29.12.2009, 18:50


--------------------
PM MAIL WWW   Вверх
artsb
Дата 29.12.2009, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



ну вы же сами писали:
Цитата

extern type val; // описание

smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mes
Дата 29.12.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(artsb @  29.12.2009,  18:00 Найти цитируемый пост)
ну вы же сами писали:

сорри.. там объявление.



--------------------
PM MAIL WWW   Вверх
artsb
Дата 29.12.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Вроде стало ясно smile Хотя во всех книгах пишут: Объявим переменную:
Код

int b;



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mes
Дата 29.12.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(artsb @  29.12.2009,  19:03 Найти цитируемый пост)
Хотя во всех книгах пишут: Объявим переменную:

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

int b;
some_func(b);

Код

extern int b;
some_func(b);
//b.cpp
int b;

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


Но если рассматривается именно конструкция, и  хотя любое определение содержит в себе объявление, называть объявлением определение некорректно.



Это сообщение отредактировал(а) mes - 29.12.2009, 20:51


--------------------
PM MAIL WWW   Вверх
artsb
Дата 29.12.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Игра слов. Забавно. smile Спасибо.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Gunslinger
Дата 30.12.2009, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(mes @  29.12.2009,  18:49 Найти цитируемый пост)
для переменных объявление происходит посредством употребления extern

если
Код

extern int m;

то это только объявление - в переменной лежит мусор.

Код

int m;

это объявление и... неявная инициализация (конструктором int по умолчанию)?

Код

int m=4;

объявление и сразу инициализация - таком способе конструктор типа не вызывается. 

Цитата(mes @  29.12.2009,  18:30 Найти цитируемый пост)

не совсем.. например константу проинициализировать можно (и нужно), а присвоить ничего нельзя..

Вот поэтому код из первого поста мне и не понятен. Повторю:
Код

class NameObject{
public:
   NameObject([U]const[/U] string& name, const& numb);
private:
    [I]string[/I] nameVale; //нет никакого extern
    int iVale;
};
...
NameObject no1([U]"blablabla"[/U],2);

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

PM MAIL   Вверх
artsb
Дата 30.12.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(Gunslinger @  30.12.2009,  09:40 Найти цитируемый пост)
то это только объявление - в переменной лежит мусор.

Всё зависит от того проинициализированна ли глобальная переменная или нет.

Цитата(Gunslinger @  30.12.2009,  09:40 Найти цитируемый пост)
это объявление и... неявная инициализация (конструктором int по умолчанию)?

Здесь нет инициализации (и не вызывается конструктор - это не объект). В этом случае в переменной мусор.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Gunslinger
Дата 30.12.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(artsb @  30.12.2009,  11:14 Найти цитируемый пост)
Здесь нет инициализации (и не вызывается конструктор - это не объект). В этом случае в переменной мусор.

Код

int f(5); //doble, float, char, string...

Синтаксис похож на конструктор у пользовательских объектов. Это случайность или у встроенных типов все же есть конструкторы?


PM MAIL   Вверх
artsb
Дата 30.12.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(Gunslinger @  30.12.2009,  17:11 Найти цитируемый пост)
Синтаксис похож на конструктор у пользовательских объектов. Это случайность или у встроенных типов все же есть конструкторы?

Это просто фича такая есть в С++. Но конструкторов у базовых типов НЕТ.

Добавлено через 10 минут и 15 секунд
Код

NameObject(const string& name, const& numb);

В этом случае, компилеру просто говорится, что переданную по ссылке переменную name нельзя изменять в функции (конструкторе). Тем не менее, можно содержимое переменной скопировать во временную переменную и "баловаться" с ней.
Благодаря тому, что переменная передаётся по ссылке, ускоряется вызов функции, а также рационально используется память. И в то же время, использование спецификатора const, гарантирует, что содержимое переменной не будет изменено внутри функции.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Gunslinger
Дата 30.12.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(artsb @  30.12.2009,  17:58 Найти цитируемый пост)
Но конструкторов у базовых типов НЕТ

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

 NameObject(const string& name, const& numb);
...
NameObject no1("blablabla",2);

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

PM MAIL   Вверх
mes
Дата 30.12.2009, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  30.12.2009,  08:40 Найти цитируемый пост)
Код

extern int m;


то это только объявление - в переменной лежит мусор.

то это только объявление -  переменной в этом месте не создается,  а  следовательно некорректно говорить о том что в ней лежит..

Цитата(Gunslinger @  30.12.2009,  08:40 Найти цитируемый пост)
Код

int m;

это объявление и... неявная инициализация (конструктором int по умолчанию)?

это определение - создание переменной.  явной инициализации тут нет, а неявная зависит от того где переменная определена.

Цитата(Gunslinger @  30.12.2009,  08:40 Найти цитируемый пост)
Код

int m=4;
объявление и сразу инициализация - таком способе конструктор типа не вызывается. 

определение с инициализацией.  инициализация бывает не только посредством конструктора.



Цитата(Gunslinger @  30.12.2009,  08:40 Найти цитируемый пост)
Либо константный аргумент не тоже самое, что и константная переменная, 

естественно не одно и то же..

Цитата(Gunslinger @  30.12.2009,  08:40 Найти цитируемый пост)
либо константу дозволяется инициализировать позже, если она не инициализирована (но тогда неявной инициализации у string нет

не понял откуда такое вытекает...

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











--------------------
PM MAIL WWW   Вверх
artsb
Дата 30.12.2009, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(Gunslinger @  30.12.2009,  19:05 Найти цитируемый пост)
Значит, если мы объявляем переменную константой, то необходимо сразу определить ее иначе в ней останется мусор, который компилятор потом не позволит изменить?

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

Цитата(Gunslinger @  30.12.2009,  19:05 Найти цитируемый пост)
Возможности отложенного определения для константных переменных нет?

нет. точнее отложенной инициализации нет.

Цитата(Gunslinger @  30.12.2009,  19:05 Найти цитируемый пост)
Не пойму тогда смысл этого кода: попытка положить в константную переменную значение. И Мейерс не пишет, что такой код вызывает ошибку.


Цитата(artsb @  30.12.2009,  17:58 Найти цитируемый пост)
В этом случае, компилеру просто говорится, что переданную по ссылке переменную name нельзя изменять в функции (конструкторе). Тем не менее, можно содержимое переменной скопировать во временную переменную и "баловаться" с ней.
Благодаря тому, что переменная передаётся по ссылке, ускоряется вызов функции, а также рационально используется память. И в то же время, использование спецификатора const, гарантирует, что содержимое переменной не будет изменено внутри функции. 



Это сообщение отредактировал(а) artsb - 30.12.2009, 19:14


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mes
Дата 30.12.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  30.12.2009,  18:05 Найти цитируемый пост)
Значит, если мы объявляем переменную константой, то необходимо сразу определить ее иначе в ней останется мусор, который компилятор потом не позволит изменить? 

да.

Цитата(Gunslinger @  30.12.2009,  18:05 Найти цитируемый пост)
возможности отложенного определения для константных переменных нет?

возможностей то у c++ много. можно изменить константу например воспользовавшись const_cast'ом.. но все это из разряда хаков.
Так что на данном для Вас этапе лучше просто принять, что константа не изменяема.


--------------------
PM MAIL WWW   Вверх
artsb
Дата 30.12.2009, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(mes @  30.12.2009,  19:13 Найти цитируемый пост)
Цитата(Gunslinger @  30.12.2009,  18:05 Найти цитируемый пост)
Значит, если мы объявляем переменную константой, то необходимо сразу определить ее иначе в ней останется мусор, который компилятор потом не позволит изменить? 

да.

сейчас проверил на BCB 6. даже не компилится.

Добавлено @ 19:16
Пишет: "constant variable must be initialized"

Это сообщение отредактировал(а) artsb - 30.12.2009, 19:17


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mes
Дата 30.12.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  30.12.2009,  18:05 Найти цитируемый пост)
Не пойму тогда смысл этого кода: попытка положить в константную переменную значение.

константая переменная это const string& name ?
Ну так эта аргументы создаются в момент вызова функции, и инициализируются переданными в функцию параметрами..
Не говоря о том, что там не константная переменная, а константная ссылка..

Добавлено через 9 минут и 31 секунду
Когда в говорят в c++ что нельзя изменить значение переменной,
означает что нельзя посрестством этой переменной изменить значение..
т.е. вот функция
Код

void f (const int& ci, int& i)
{
    while (--i)
    std::cout << ci  << " ";
}

принимает два аргумента по ссылке, причем первый по константной.

исходя из этого делаем заключение, что внутри функции ci не может измениться,
однако изменение самого значения которое хранит ci возможно :
Код

int main()
{
   int j=3;
   f(j,j);
}

smile



--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 30.12.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(mes @  30.12.2009,  19:17 Найти цитируемый пост)
const string& name ... Не говоря о том, что там не константная переменная, а константная ссылка..

о_О? Вы имели ввиду: константная ссылка==ссылка на константу? Или аналогия с указателями неприменима? К подобному коду во всех учебниках говорится, что изменить такой объект нельзя. 

Цитата(mes @  30.12.2009,  19:17 Найти цитируемый пост)
Ну так эта аргументы создаются в момент вызова функции, и инициализируются переданными в функцию параметрами..

То есть получается вроде: 
Код

Тип Параметр_Функции=Аргумент //значение, адрес

?


Это сообщение отредактировал(а) Gunslinger - 30.12.2009, 22:30
PM MAIL   Вверх
mes
Дата 30.12.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  30.12.2009,  21:21 Найти цитируемый пост)

То есть получается вроде: 

Параметр - то что передаем, а аргумент , то что получает функция
две стороны одной медали smile

Цитата(Gunslinger @  30.12.2009,  21:21 Найти цитируемый пост)
константная ссылка==ссылка на константу? 

угу.. ссылка на константу

Цитата(Gunslinger @  30.12.2009,  21:21 Найти цитируемый пост)
Или аналогия с указателями неприменима? 

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


Цитата(Gunslinger @  30.12.2009,  21:21 Найти цитируемый пост)
К подобному коду во всех учебниках говорится, что изменить такой объект нельзя. 

плохо книги смотрели..  smile ну а запустить пример хотя бы попробовали ?

Изменить объект нельзя когда он изначально задается как константный и может быть размещен в рид-онли мемори.
тут же мы один и тот же неконстантный объект передаем один раз посредством ссылки на константу,  другой - посредством простой ссылки.
то есть у нас получается два интерфейса к одному и тому же участку памяти : один read-only,  другой read-write.






Это сообщение отредактировал(а) mes - 30.12.2009, 22:56


--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 31.12.2009, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



С наступающим новым 2010м годом!

А теперь к скучномуsmile:
Цитата(mes @  30.12.2009,  22:55 Найти цитируемый пост)
Параметр - то что передаем, а аргумент , то что получает функция
две стороны одной медали smile

Цитата(Gunslinger @  30.12.2009,  21:21 Найти цитируемый пост)
К подобному коду во всех учебниках говорится, что изменить такой объект нельзя. 

плохо книги смотрели..  smile ну а запустить пример хотя бы попробовали ?
Изменить объект нельзя когда он изначально задается как константный и может быть размещен в рид-онли мемори.

О_О. Прямо утро откровений. Тогда: Тип Параметра=Аргумент smile Не, запустить не пробовал. Главный компилятор в голове.

Цитата(mes @  30.12.2009,  22:55 Найти цитируемый пост)

Цитата(Gunslinger @  30.12.2009,  21:21 Найти цитируемый пост)
константная ссылка==ссылка на константу? 

угу.. ссылка на константу

Цитата(Gunslinger @  30.12.2009,  21:21 Найти цитируемый пост)
Или аналогия с указателями неприменима? 

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

Какой тогда смысл писать const к аргументу-ссылке, если константность объекта определяется в объявлении вызывающей программы? 
Если переменная не должна быть изменена в функции, то необходимо сделать ее константной в вызывающей программе? Или не обязательно - можно сделать константной функцию, куда передаются ссылки?

PM MAIL   Вверх
mes
Дата 31.12.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  31.12.2009,  09:55 Найти цитируемый пост)
Какой тогда смысл писать const к аргументу-ссылке, если константность объекта определяется в объявлении вызывающей программы? 

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

Добавлено @ 12:40
Цитата(Gunslinger @  31.12.2009,  09:55 Найти цитируемый пост)
_О. Прямо утро откровений. Тогда: Тип Параметра=Аргумент 

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

Код

void f(std::string const& str)
{
// str - аргумент переданный в функцию
}

f ("any string"); 
// "any string" - это строковой литерал переданный как параметр в функцию
// в последствии он будет приведен к const char * и на этой основе будет создан временный объект 
// пристыкованный к ссылке, и рассматриваемый внутри функции как str.



Это сообщение отредактировал(а) mes - 31.12.2009, 12:41


--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 31.12.2009, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(mes @  31.12.2009,  12:34 Найти цитируемый пост)
Цитата(Gunslinger @  31.12.2009,  09:55 Найти цитируемый пост)
_О. Прямо утро откровений. Тогда: Тип Параметра=Аргумент 

 smile 

Забыл поменять местами, извиняюсьsmile Меня этот момент интересует по следующей причине: один из обязательных конструкторов в пользовательских типах - конструктор копирования. Либо пишешь сам, либо создается компилятором. В одном из правил Мейерс пишет, что таким образом в аргумент функции передается параметр (такого же типа, разумеется), func(obj1(obj2));. Получается на аппаратном уровне такой высокоуровневый код разворачивается в ассемблерный код занесения пользовательских объектов в стек. У встроенных типов конструкторов нет, какой с++шный код ассоциируется с ассемблерной командой занесения в стек - хз.

Цитата(mes @  31.12.2009,  12:34 Найти цитируемый пост)
объявлен в главной программе, но внутри функции он должен себя вести как ссылка на константу.

Стоп!! 
Код

NameObject(const string& name, const& numb);
.....
no1("blablabla");

Это похоже на создание временного объекта и привязки к нему ссылки! Блин, не научусь читать код... Временный объект создается в стеке функции или вызывающей? Если смотреть только на семантику (не смотреть, что это передача в функцию), то в стеке функции...

Цитата(mes @  31.12.2009,  12:34 Найти цитируемый пост)
смысл в том, что функции не важно каким он объявлен в главной программе, но внутри функции он должен себя вести как ссылка на константу.

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


Это сообщение отредактировал(а) Gunslinger - 31.12.2009, 13:55
PM MAIL   Вверх
mes
Дата 31.12.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  31.12.2009,  12:51 Найти цитируемый пост)
Забыл поменять местами

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

Цитата(Gunslinger @  31.12.2009,  12:51 Найти цитируемый пост)
один из обязательных конструкторов в пользовательских типах - конструктор копирования.

Давайте для начала уточним, что такое для Вас конструктор, и чем он отличается от функции.

Цитата(Gunslinger @  31.12.2009,  12:51 Найти цитируемый пост)
Временный объект создается в стеке функции или вызывающей?

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

f()
{  int i1;
  { int i2;
  }
   int i3;
}

к моменту создания i3, i2 будет уже уничтожена,а i1 удалится только после i3;

Цитата(Gunslinger @  31.12.2009,  12:51 Найти цитируемый пост)
Ну так и получается, что раз ссылка константная, то внешний объект изменить нельзя, пусть он и объявлен без cоnst...

в этом примере :
http://forum.vingrad.ru/index.php?showtopi...t&p=2061027
 значение объекта переданного по ссылке на константу (хотя и косвенно, но) меняется ..

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






--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 1.1.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



С наступившим!smile

Цитата(mes @  31.12.2009,  14:32 Найти цитируемый пост)
У функции один стек, однако время жизни переменных может сильно разниться

Теперь понял, спасибо.

Цитата(mes @  31.12.2009,  14:32 Найти цитируемый пост)
в этом примере :
http://forum.vingrad.ru/index.php?showtopi...t&p=2061027

Код

void f (const int& ci, int& i)
{
    while (--i)
    std::cout << ci  << " ";
}
...
int main()
{
   int j=3;
   f(j,j);
}

Я говорил про это же: ci из функции f изменить нельзя.
Получается так:
1. У встроенных типов конструкторов нет. Поэтому
2. если написать int g;, то создастся переменная с мусором в качестве значения. Это объявление
3. int m=2; - объявление и инициализация. Инициализация -- когда в переменную пишем только когда она только что объявлена (как в примере) или не важно, можно где-то после объявления? Т.е. инициализацией называют самое первое присваивание (неважно, когда его делаем), которое затирает мусор?
4. Объявление -- присвоение переменной нового значения, т.е. затирание не мусора, а значения, ранее записанного программистом?
5. Оффтоп: конструктор копирования нужен, чтобы можно было передавать пользовательский объект в функцию (по значению, конечно)?

Это сообщение отредактировал(а) Gunslinger - 1.1.2010, 16:48
PM MAIL   Вверх
mes
Дата 1.1.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
Я говорил про это же: ci из функции f изменить нельзя.

да нельзя.. но почему ci дает разный результат на каждой итерации цикла ?


Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
У встроенных типов конструкторов нет. 

нету

Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
Поэтому
2. если написать int g;, то создастся переменная с мусором в качестве значения.

не поэтому 

Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
Это объявление

это определение


Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
3. int m=2; - объявление и инициализация. 

определение и инициалиыация


Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
Инициализация -- когда в переменную пишем только когда она только что объявлена (как в примере) или не важно, можно где-то после объявления? 

не обьявления, а создания

Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
Т.е. инициализацией называют самое первое присваивание (неважно, когда его делаем), которое затирает мусор?

это не присваивание.. 
1. возьмите инициализацию ссылки - в контексте присваивания  это рассматривать нельзя..
2. она не должна затирать мусор .. она должна привадитэ обьект в начальное состояние..


Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
4. Объявление -- присвоение переменной нового значения, т.е. затирание не мусора, а значения, ранее записанного программистом?

нет нет нет нет


Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
5. Оффтоп: конструктор копирования нужен, чтобы можно было передавать пользовательский объект в функцию (по значению, конечно)?

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



--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 2.1.2010, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(mes @  1.1.2010,  19:21 Найти цитируемый пост)
Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
Я говорил про это же: ci из функции f изменить нельзя.

да нельзя.. но почему ci дает разный результат на каждой итерации цикла ?

Не обратил внимание на второй параметр.. Упустил такой вариант, изменить можно. Хотя таких психов надо поискать.

Цитата(mes @  1.1.2010,  19:21 Найти цитируемый пост)
Цитата(Gunslinger @  1.1.2010,  15:47 Найти цитируемый пост)
1. У встроенных типов конструкторов нет. Поэтому
2. если написать int g;, то создастся переменная с мусором в качестве значения.

не поэтому 

Зависит от реализации компилятора?

Цитата(Gunslinger @  1.1.2010,  16:47 Найти цитируемый пост)
. если написать int g;

Цитата(mes @  1.1.2010,  19:21 Найти цитируемый пост)
это определение

Всегда думал, что подобный текст - объявление. Что же такое объявление?

Цитата(mes @  1.1.2010,  19:21 Найти цитируемый пост)
она не должна затирать мусор .. она должна привадитэ обьект в начальное состояние..

"Затирать мусор" имел ввиду присвоение к нужному значению. Вроде тоже самое.

Концептуальный процесс: выделение памяти для объекта; присвоение объекту первоначального значения (либо нужного, либо "технического" -- 0); изменение значения объекта (в процессе работы). Так вот на такой схеме: что есть что?

PM MAIL   Вверх
zim22
Дата 2.1.2010, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Gunslinger @  2.1.2010,  17:30 Найти цитируемый пост)
Всегда думал, что подобный текст - объявление. Что же такое объявление?

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

объявление - это указание компилятору, что переменная определена где-то в другом месте.
если на этапе линковки это "другое место" обнаружено не будет - будет ошибка линковки.

вот объявление:
Код

extern int a;


а вот определение:
Код

int a;

***
не поленюсь из книги привести цитату, уж больно хорошо объясняется.
isbn 5-8459-1121-4 (рус)
isbn 0-201-72148-1(англ)
Цитата

2.3.5. Declarations and Definitions
As we'll see in Section 2.9 (p. 67), C++ programs typically are composed of many files. In order for multiple files to access the same variable, C++ distinguishes between declarations and definitions.
definition of a variable allocates storage for the variable and may also specify an initial value for the variable. There must be one and only one definition of a variable in a program.
declaration makes known the type and name of the variable to the program. A definition is also a declaration: When we define a variable, we declare its name and type. We can declare a name without defining it by using the extern keyword. A declaration that is not also a definition consists of the object's name and its type preceded by the keyword extern:
Код

extern int i;   // declares but does not define i
int i;          //  declares and defines i

An extern declaration is not a definition and does not allocate storage. In effect, it claims that a definition of the variable exists elsewhere in the program. A variable can be declared multiple times in a program, but it must be defined only once.

A declaration may have an initializer only if it is also a definition because only a definition allocates storage. The initializer must have storage to initialize. If an initializer is present, the declaration is treated as a definition even if the declaration is labeled extern:
Код

extern double pi = 3.1416; // definition

Despite the use of extern, this statement defines pi. Storage is allocated and initialized. An extern declaration may include an initializer only if it appears outside a function.

Because an extern that is initialized is treated as a definition, any subseqent definition of that variable is an error:
Код

extern double pi = 3.1416; // definition
double pi;                 // error: redefinition of pi

Similarly, a subsequent extern declaration that has an initializer is also an error:
Код

extern double pi = 3.1416; // definition
extern double pi;          // ok: declaration not definition
extern double pi = 3.1416; // error: redefinition of pi

The distinction between a declaration and a definition may seem pedantic but in fact is quite important.
NOTE: In C++ a variable must be defined exactly once and must be defined or declared before it is used.


Это сообщение отредактировал(а) zim22 - 2.1.2010, 18:52


--------------------
PM MAIL   Вверх
Gunslinger
Дата 3.1.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(zim22 @  2.1.2010,  18:41 Найти цитируемый пост)
объявлять переменные можно сколько угодно раз. определены же они должны быть только один раз.
тоже самое касается и функций.

объявление - это указание компилятору, что переменная определена где-то в другом месте.
если на этапе линковки это "другое место" обнаружено не будет - будет ошибка линковки.

Фигово по переводной литературе обучаться... Даже и не думал, что объявление -- это extern. Что за книга?
Значит, 
1. объявление -- extern: память не выделяется.  extern используется только для объявления встроенных типов и самостоятельных функций? Для классов есть include.
2. Определение -- обычное создание переменной, вроде int d: память выделяется, в ней лежит мусор
3. Инициализация -- первоначальное присвоение значения. Далее по программе -- уже не инициализация, а присвоение.
Так?

PM MAIL   Вверх
zim22
Дата 3.1.2010, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Gunslinger @  3.1.2010,  12:04 Найти цитируемый пост)
Что за книга?

Цитата(zim22 @  2.1.2010,  17:41 Найти цитируемый пост)
isbn 5-8459-1121-4 (рус)
isbn 0-201-72148-1(англ)


Цитата(Gunslinger @  3.1.2010,  12:04 Найти цитируемый пост)
Так?

нет
1. есть объявления переменных, функций, предварительные объявления классов.
объявления переменных - это extern
Код

extern int i;
struct S { };
extern S myS;

объявление функций - это просто строка с прототипом функции (без её тела)
Код

void fcn();

предв.объявление класса (forward declaration) - это ключевое слово class за которым следует имя класса, заканчивающееся ;
Код

class X;
class Z {
  void f(X&);
};

Цитата(Gunslinger @  3.1.2010,  12:04 Найти цитируемый пост)
2. Определение -- обычное создание переменной, вроде int d: память выделяется, в ней лежит мусор

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


Это сообщение отредактировал(а) zim22 - 3.1.2010, 13:22


--------------------
PM MAIL   Вверх
Gunslinger
Дата 3.1.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(zim22 @  3.1.2010,  13:19 Найти цитируемый пост)
объявление функций - это просто строка с прототипом функции (без её тела)

Вспомнил, читал. Смысл тотже самый, что и extern. Весь нюанс между объявлением и определением в том, что под объявленный объект память не выделяется и присвоение такому объекту значения будет ошибкой?
PM MAIL   Вверх
zim22
Дата 3.1.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Gunslinger @  3.1.2010,  14:17 Найти цитируемый пост)
 и присвоение такому объекту значения будет ошибкой?

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


--------------------
PM MAIL   Вверх
mes
Дата 3.1.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  3.1.2010,  14:17 Найти цитируемый пост)
Весь нюанс между объявлением и определением в том, что под объявленный объект память не выделяется и присвоение такому объекту значения будет ошибкой

присвоение тут второстепенно.. если объект только объявлен, но не определен, значит его не существует. 
а ньанс в том, что 
Цитата(zim22 @  2.1.2010,  17:41 Найти цитируемый пост)
объявлять переменные можно сколько угодно раз. определены же они должны быть только один раз.


и почитайте наконец то (внимательно и с разбором) хоть какую нибудь книжку по C++.. а то толчем воду в ступе...




Это сообщение отредактировал(а) mes - 3.1.2010, 17:56


--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 7.1.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(zim22 @  3.1.2010,  16:19 Найти цитируемый пост)
просто откомпиль

поставил компиляторsmile
Цитата(mes @  3.1.2010,  17:56 Найти цитируемый пост)
и почитайте наконец то (внимательно и с разбором) хоть какую нибудь книжку по C++.. а то толчем воду в ступе...

Нашел книгу, о которой писал zim22, и еще кое-какие. Праздничные дни еще остались -- пошел не спеша читать.

Спасибо за помощь.




PM MAIL   Вверх
mes
Дата 7.1.2010, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  7.1.2010,  08:43 Найти цитируемый пост)
поставил компиляторsmile

откройте для себя компилятор, который в инете всегда под рукой  smile 
http://codepad.org/



--------------------
PM MAIL WWW   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2147 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.