Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
#1

На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? - C++

31.03.2013, 23:51. Просмотров 839. Ответов 20
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
//Тут некоторый код
 
void foo(X* pX) {printf ("%x\n", pX);}; 
void bar(Y* pY) {printf ("%x\n", pY);}; 
int main() 
{ 
 //Тут тоже некоторый код
 foo(pA); 
 bar(pA); 
 //И тут тоже некоторый код
}
А вот вывод:
3e2478
3e247c
Задание: восстановить весь код, чтобы так всё и было. Вроде передаётся одно значение (pA) а в функциях оно почему-то разное
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 23:51     На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему?
Посмотрите здесь:
C++ Битовое ИЛИ. Пердача нескольких констант в один параметр функции
C++ Создать функцию, которой строка передаётся как параметр, и которая возвращает количество слов
Создать функцию, которой строка передаётся как параметр, и которая возвращает количество слов C++
Параметр конструктора класса нигде не задействован, но его отсутствие влияет на компиляцию, почему так? C++
Задачка для новичков#1: найти причину UB в коде и исправить его согласно условию C++
Возврат значения через параметр функции C++
динамическое создание двумерного массива и передача его как параметр функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
01.04.2013, 02:30  [ТС]     На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? #16
Я там подкорректировал, но это для простоты. Условие из первого поста вполне корректно, просто оно чуть-чуть сложнее минимально необходимого для решения задачи. Да, надо чтобы разные числа вывелись и всё.
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
01.04.2013, 02:32     На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? #17
Просто под этот код можно много фигни понаписать, типа этой, но вряд ли это за решение сойдет
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
#define pA (int*)(rand()%10)
typedef int X;
typedef int Y; 
 
void foo(X* pX) {printf ("%x\n", pX);}; 
void bar(Y* pY) {printf ("%x\n", pY);};
 
int main() 
{ 
 foo(pA); 
 bar(pA); 
}
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
01.04.2013, 02:35  [ТС]     На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? #18
Ну вот Jupiter опубликовал мой ответ. Ну всё, собсно.

Добавлено через 1 минуту
BumerangSP, сойдёт, но у меня и Jupiter, всё же другой ответ.
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
01.04.2013, 02:36     На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? #19
Я тоже немного подумал над задачей.
Кликните здесь для просмотра всего текста
В итоге первым пришел вариант в голову как у Jupiter.
Второй, сделать так чтобы это дерьмо компилилось, а затем сверху дописать
C++
1
#define printf(x, y) printf("%i\n", rand());
Третий вариант - это реально просто у класса X перегрузить операторы приведения к типу X* и Y*, которые будут возвращать нужные нам циферки.
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
01.04.2013, 02:40     На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? #20
Немного подкорректировал пример Jupiter'a. Чтобы он полностью соответствовал выводу в задании. Но почему так происходит?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
 
class X
{
   public:
   virtual ~X()
   {
   }
};
 
class Y
{
   public:
   virtual ~Y()
   {
   }
};
 
class Z : public X, public Y
{
   public:
   virtual ~Z()
   {
   }
};
 
 
void foo(X* pX)
{
   std::cout << pX << std::endl;
}
 
void bar(Y* pY)
{
   std::cout << pY << std::endl;
}
 
int main()
{
   Z *pA = (Z*) 0x3e2478;
   Z &z = *pA;
   foo(pA);
   bar(pA);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 02:41     На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему?
Еще ссылки по теме:
C++ Почему у дружественной функции два аргумента, а у метода класса один?
Одно имя для указателей на разные функции C++
Почему в функции operator не ставят тип возвращаемого значения? C++
Почему у функции main() тип возвращаемого значения - int? C++
C++ Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
13053 / 7316 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 1
01.04.2013, 02:41     На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? #21
Цитата Сообщение от Buckstabue Посмотреть сообщение
Но почему так происходит?
Почитайте про полиморфизм и множественное наследование

Примерно так это выглядит:
На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему?
Yandex
Объявления
01.04.2013, 02:41     На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru