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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Игра в С++ 
:(
    Опции темы
Fazil6
Дата 13.7.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Предлагаю ответить на вопрос. 
Вопрос устный, т.е. не используя компилятор
Имеем код
Код

void f(int *n)
{
n = new int;
*n = 7;
delete n;
}

.....

int *x;

.....
f(x);

printf("%d", *x);  


Что выведется и почему? 

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



зависит от того, выделял ли ты память под x перед вызовом printf. Если не выделял, то все что угодно, вплоть до Segmentation fault (Access violation).
Так как функция f не изменит значение указателя x  в вызвавшей функции.
PM   Вверх
Damarus
Дата 13.7.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Цитата(Fazil6 @  13.7.2007,  11:34 Найти цитируемый пост)
Что выведется

Это как звёзды сложатся  smile

Это сообщение отредактировал(а) Damarus - 13.7.2007, 12:39
PM MAIL ICQ Jabber   Вверх
Fazil6
Дата 13.7.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



хорошо. Считаем вопрос исчерпаным. Все были достаточно внимательны и никто не ошибся...


А вот еще такой очень простой вопрос (опять же не прибегая к услугам компиллятора). 
Только по возможности отвечайте невидимыми чернилами, чтобы не распугать желающих оставить свой вариант ответа. Это  не проверка чьих-то знаний и минусы за неправильные ответы я никому лепить не буду, как и смеяться, если кто-то напишет чушь с моей точки зрения. 
Мне важно узнать какие варианты будут предложены. Поэтому и компиллятор прошу не использовать

что выведется в этой программе и почему  ?
Код

class A
{
public:
    A():x(0){};

    A& operator=(const A&)
    {
        ++x;
        return *this;
    }
    
    int x;
}

A f()
{
    A a;
    
    return a;
}
void main()
{    
    A  a1 = f();
    std::cout << a1.x;
}

PM MAIL   Вверх
zkv
Дата 13.7.2007, 13:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



0
так как тут: 
    A  a1 = f();
конструктор копирования дб вызван, он по дефолту скопирует поля, а так как оператор = ни разу не вызывался, то х=0

ps совсем невидимых чернил не нашел...



Это сообщение отредактировал(а) zkv - 13.7.2007, 13:34
PM MAIL   Вверх
Sartorius
Дата 13.7.2007, 13:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

    A  a1 = f();

 вызовется конструктор копирования (по умолчанию). 

Это сообщение отредактировал(а) Sartorius - 13.7.2007, 13:35
PM MAIL ICQ   Вверх
Fazil6
Дата 13.7.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



zkv, Sartorius, 
Цитата(zkv @  13.7.2007,  13:33 Найти цитируемый пост)
ни разу не вызывался

почему?

PM MAIL   Вверх
Sartorius
Дата 13.7.2007, 13:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 Потому, что запись 
Код

A  a1 = something; 

 Равнозначна 
Код

A  a1(something) ;

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


Эксперт
***


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

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



Цитата(Sartorius @  13.7.2007,  13:57 Найти цитируемый пост)
Равнозначна 

почему? Указан ведь оператор=, так почему он не вызывается? 
PM MAIL   Вверх
Sartorius
Дата 13.7.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



http://ad.cctpu.edu.ru/cpp/glava18_9.htm\
На самом деле у Солтера и Клепера в "C++ для профессионалов" это описано очень хорошо, но ссылки на текст книжки не нашел  smile 

ЗЫ Fazil6, такое впечатление, что ты сам удивлен результатом ... smile 

Это сообщение отредактировал(а) Sartorius - 13.7.2007, 15:15
PM MAIL ICQ   Вверх
Fazil6
Дата 13.7.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Sartorius @  13.7.2007,  15:13 Найти цитируемый пост)
Fazil6, такое впечатление, что ты сам удивлен результатом ...

вообще-то я в курсе почему.
Я хотел узнать какие мнения могут существовать для объяснения этого. И как следствие эквивалентности кода
Код

A  a1 = f();
// варианту
A  a1;
a1 = f();

Ладно, этот вопрос закрываем как простой и не вызывающий затруднений 
PM MAIL   Вверх
Daevaorn
Дата 13.7.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(Fazil6 @  13.7.2007,  14:22 Найти цитируемый пост)
что выведется в этой программе и почему  ?

ничего. она не скомпилируется. не корректно заданный вопрос, хуже плохого ответа.
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.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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