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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странное поведение конструктора 
V
    Опции темы
fear
Дата 23.2.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Кто сможет объяснить такое поведение конструктора?
Меня что-то озадачило весьма... старею похоже smile

Код

#include <iostream>

class A {
  public:
    A(const int &) {
      std::cout<<"CONSTRUCTOR()"<<std::endl;
    }
};

int main()
{
  A a1(8);
  A a2(int());
}


a1 при создании выводит в консоль строку "CONSTRUCTOR()"
a2 не выводит ничего

----
gcc version 4.2.1 (Apple Inc. build 5646)


Это сообщение отредактировал(а) fear - 23.2.2010, 14:25
PM MAIL   Вверх
mes
Дата 23.2.2010, 14:33 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



А Вы не создаете объекта во втором случае, а описываете функцию - проблема  синтаксиса smile



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


Бывалый
*


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

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



Цитата(mes @ 23.2.2010,  14:33)
А Вы не создаете объекта во втором случае, а описываете функцию - проблема  синтаксиса smile

сможете объяснить подробнее, как так? ))
PM MAIL   Вверх
mes
Дата 23.2.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(fear @  23.2.2010,  13:24 Найти цитируемый пост)
A a2(int());

это прототип функции a2.




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


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


Вождь индейцев
*


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

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



Вот если бы ты там написал что-то типа 

Код

#include <iostream>
class A {
  public:
    A(const int &) {
      std::cout<<"CONSTRUCTOR()"<<std::endl;
    }
};
int main()
{
  float f = 4.5;
  A a1(8);
  A a2(int(f));
}


то тогда было бы понятно. А так ты не передаёшь ему никакого фактического параметра, вот он и не отрабатывает.
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
mes
Дата 23.2.2010, 14:59 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(RatHat @  23.2.2010,  13:56 Найти цитируемый пост)
А так ты не передаёшь ему никакого фактического параметра, вот он и не отрабатывает. 

передача "никакого фактического" параметра  тут не причем, вот не меняя "этого никакого" делаем пример работоспособным :

Код

// 1
A a2 ( (int()) );
// 2
A a2 = A( int() );

smile

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


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


Бывалый
*


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

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



mes, ды вы оказывается гуру smile, не знал особенности такой, спасибо
PM MAIL   Вверх
Mephisto
Дата 23.2.2010, 15:08 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

Репутация: нет
Всего: 34



Цитата(mes @  23.2.2010,  15:51 Найти цитируемый пост)
Цитата(fear @  23.2.2010,  13:24 Найти цитируемый пост)
A a2(int());

равноценно 

A a2(int);

А что в первом случае обозначают скобки?

PM   Вверх
RatHat
Дата 23.2.2010, 15:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


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

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



Ну замечательно, так в итоге ты инициализировал объект, конструктор вызвался.
При передаче параметра происходит та же инициализация, или я неправ?
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
mes
Дата 23.2.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Mephisto @  23.2.2010,  14:08 Найти цитируемый пост)
А что в первом случае обозначают скобки?

сорри, запарился там опечатка, исправляюсь.
равноценна
Код

A a2(int (*)()); 

т.е описание функции возвращающей A и принимающей  указатель на функцию возвращающую int .

Добавлено через 13 минут и 20 секунд
Цитата(RatHat @  23.2.2010,  14:16 Найти цитируемый пост)
Ну замечательно, так в итоге ты инициализировал объект, конструктор вызвался.
При передаче параметра происходит та же инициализация, или я неправ? 

не понял сути вопроса..


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


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


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

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



Цитата(fear @  23.2.2010,  14:07 Найти цитируемый пост)
ды вы оказывается

пока нет.. я не волшебник, а только учусь © smile


--------------------
PM MAIL WWW   Вверх
RatHat
Дата 23.2.2010, 17:38 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


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

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



Ну ты типа написал, что, мол, передача параметров не при чём и всё такое...
В то время, как что твой вариант, что мой, имеют право на существование, ибо в обоих вариантах конструктор вызовется.
Это из сериии 
- 2+2 = 4;
- Нет!!! 2+2 тут не при чём совершенно, я на самом деле 4*1 = 4!
;)
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
mes
Дата 23.2.2010, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(RatHat @  23.2.2010,  16:38 Найти цитируемый пост)
что, мол, передача параметров не при чём

не передача, а
Цитата(mes @  23.2.2010,  13:59 Найти цитируемый пост)
передача "никакого фактического"

надеюсь узнаете свою фразу smile

В этой модернизации
Цитата(mes @  23.2.2010,  13:59 Найти цитируемый пост)
A a2 ( (int()) );

 не было добавлено, ничего, что могло бы считаться в Ваших терминах "каким-либо параметром",
но пример стал работоспособным, а это значит, что
Цитата(mes @  23.2.2010,  13:59 Найти цитируемый пост)
передача "никакого фактического" параметра  тут не причем,


кстати не проясните, что значит "никакой фактический параметр"  ?  smile

 smile 
Цитата(RatHat @  23.2.2010,  16:38 Найти цитируемый пост)
Это из сериии 
- 2+2 = 4;
- Нет!!! 2+2 тут не при чём совершенно, я на самом деле 4*1 = 4!

угу только "перепечатывая"  диалог, упустили в нем первую фразу :
- какой математической операцией сделать из единицы 4 ?
 smile 
 
 

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


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


Вождь индейцев
*


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

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



mes, для особо одарённых советую перечитать мой первый коммент, там написано: "ты НЕ передал никакого фактического параметра", а не ты "передал никакой фактический параметр". 
Если ты не понимаешь, что значит "не передал никакого фактического параметра", то я тебе сочувствую. 
Мораль, учимся читать или учим русский язык ;)
И скорее первая фраза звучала как : "я вот пытаюсь сделать 4, но у меня не получается. 3+1 работает, а по-другому не работает"

Это сообщение отредактировал(а) RatHat - 23.2.2010, 18:40
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
mes
Дата 23.2.2010, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(RatHat @  23.2.2010,  17:37 Найти цитируемый пост)
для особо одарённых

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

Цитата(RatHat @  23.2.2010,  17:37 Найти цитируемый пост)
Мораль, учимся читать или учим русский язык ;)

Хороший вывод,  я даже помогу Вам в этом .. smile 
Начнем с 
Цитата(RatHat @  23.2.2010,  17:37 Найти цитируемый пост)
там написано: "ты НЕ передал никакого фактического параметра", а не ты "передал никакой фактический параметр". 


ну вот и объясните почему в коде
Код

A a2( int() );

НЕ передано никакого фактического параметра и НЕ РАБОТАЕТ
а в 
Код

A a2( (int()) );

также НЕ передано никакого фактического параметра и РАБОТАЕТ ?!
smile

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


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1751 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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