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

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

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

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

31.03.2013, 23:51. Просмотров 866. Ответов 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) а в функциях оно почему-то разное
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 23:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? (C++):

Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента - C++
Проблема такая: есть некая функция. Внутри нее происходят одни и теже вычисления, вне зависимости от типа входных данных. void...

Что означает первый параметр метода этого класса? И почему при вызове метода передаётся один параметр(второй)? - C#
public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)

Разные функции используют разные системы координат. Почему так? - OpenGL
Друзья! К примеру, нарисовали мы окно. И используем функцию void glutMouseFunc(void (*func)(int button, int state, int x, int y); ...

почему разные значения - VBA
Написал скрипт VBA Public Sub aa() Dim a As Double a = Log(2) * Log(2) * Log(2) Cells(1, 1) = a End Sub данный код...

Разные значения один и тот же результат - C (СИ)
Ввожу разные переменные а результат выдает один и тот же. В чем может причина может я что не так делаю #include &lt;stdio.h&gt; #include...

Циклы: почему выводятся разные значения? - PHP
Здравствуйте, помогите понять, почему в первом случае, выводит на экран 561, а во втором 595, в смысле разные значения. Мне кажется, что...

20
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
01.04.2013, 00:17 #2
Очень интересно. А можно использовать многопоточность? Эх. Никогда с таким не сталкивался. Может надо переопределить фунцию привидения к void * указателю? Ну или к указателю на pX или pY
0
Croessmah
Эксперт CЭксперт С++
13501 / 7658 / 865
Регистрация: 27.09.2012
Сообщений: 18,844
Записей в блоге: 3
Завершенные тесты: 1
01.04.2013, 00:20 #3
Можно так:
На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему?
1
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
01.04.2013, 00:48 #4
Почему-то не работает :'-) Но я хоть близок к истине?
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
#include <stdio.h>
 
class Y
{
 
};
 
class X
{
public:
   operator Y*() {return (Y*)0x3e247c;};
};
 
 
 
void foo(X* pX) {printf ("%x\n", pX);};
void bar(Y* pY) {printf ("%x\n", pY);};
 
int main()
{
 X *pA = (X*)0x3e2478;
 
 foo(pA);
 bar(pA);
 // И тут тоже некоторый код
}
0
nonedark2008
925 / 664 / 141
Регистрация: 28.07.2012
Сообщений: 1,806
01.04.2013, 00:56 #5
Цитата Сообщение от Buckstabue Посмотреть сообщение
Но я хоть близок к истине?
Конечно можно придумать кучу вариантов решения. А так, нет - ваш вариант не будет работать.
Желательно копать в сторону полиморфизма.
0
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,481
01.04.2013, 01:23  [ТС] #6
Цитата Сообщение от Buckstabue Посмотреть сообщение
А можно использовать многопоточность?
В моём ответе многопоточности нет, но если умело примените, ответ будет засчитан.
Croessmah, чё-то у вас всё тёмное там; вы так просто код напишите и всё.
0
Croessmah
Эксперт CЭксперт С++
13501 / 7658 / 865
Регистрация: 27.09.2012
Сообщений: 18,844
Записей в блоге: 3
Завершенные тесты: 1
01.04.2013, 01:24 #7
Цитата Сообщение от kravam Посмотреть сообщение
Чё-то у вас всё тёмное там вы так просто код напишите и всё.
тогда пропадет смысл темы. Я предложил лишь один вариант. Сейчас в ЛС скину )
0
Stranger777
4 / 8 / 0
Регистрация: 08.02.2013
Сообщений: 47
01.04.2013, 01:34 #8
Тут идея решения, запрятал чтоб посмотрели только те, кому совсем не терпится.
Кликните здесь для просмотра всего текста
Классы X и Y в разных пространствах имён, соответственно члены классов, передаваемые в функцию, могут иметь одно имя при разных фактических значениях. Код лениво писать. =)


Добавлено через 4 минуты
Croessmah, поясните пожалуйста идиоту, как тут спойлер работает? кликаю - и нифига, смысл спойлера уходит. Предположительно где-то там fieldset должно быть, но экспериментировать надоело.
0
Croessmah
01.04.2013, 01:38
  #9

Не по теме:

Цитата Сообщение от Stranger777 Посмотреть сообщение
кликаю - и нифига
Обновите страницу.

1
nonedark2008
925 / 664 / 141
Регистрация: 28.07.2012
Сообщений: 1,806
01.04.2013, 01:42 #10
Цитата Сообщение от Stranger777 Посмотреть сообщение
Тут идея решения, запрятал чтоб посмотрели только те, кому совсем не терпится.
Ну вы тут совсем напутили >_> Если я правильно понял то, что вы хотели донести - то это работать не будет.
0
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,481
01.04.2013, 01:42  [ТС] #11
Stranger777, сомневаюсь. Дело в том, что имя-то одно , но коль скоро оно принадлежит разным класса, его надо как-то квалифицировать, причём делать это ОДНОЗНАЧНО, ну например:
C++
1
2
foo(X::pA); 
bar(Y::pA);
а это уже явно два разных pA

+++++++++++++++++++++++++++++++++++

Croessmah, скинул мне в личку один из правильных ответов, мы его если чё опубликуем. Мой ответ кардинально разнится от ответа Croessmah, то есть не просто косметически, но принципиально. Вот имеем уже два ответа.
0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
01.04.2013, 02:10 #12
kravam, а в тех местах, где помечено комментом, код должен быть обязательно?
0
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,481
01.04.2013, 02:24  [ТС] #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
#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); 
 //Тут необязательный код для подбирания соплей, типа память освободить, ноль вернуть.
}
+++++++++++++++++++++++++++++++++++++++++++++

Croessmah прислал мне уже два принципиально разных варианта, а у меня есть третий.
0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
01.04.2013, 02:26 #14
kravam, да, комменты на это наводят. А ДО вызовов?
И вообще, тут главное только то, чтобы вышли разные значения?
0
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.04.2013, 02:28 #15
что за тайны мадридского двора?
Кликните здесь для просмотра всего текста
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 z;
   Z* pA = &z;
   foo(pA); 
   bar(pA);
}
1
01.04.2013, 02:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 02:28
Привет! Вот еще темы с ответами:

Задать несколько значений в один параметр функции - Assembler
В Дельфях например есть такая структуа: AnyFunction(@target, @source, ACCESS_ATTRIBUTE1 or ACCESS_ATTRIBUTE2) Или в Сях ...

Программа, определяющая, есть ли в массиве хотя бы один столбец, содержащий все одинаковые значения, содержащий все разные значения - Free Pascal
Написать программу, определяющую есть ли в массиве хотя бы один столбец, содержащий все одинаковые значения, содержащий все разные...

Битовое ИЛИ. Пердача нескольких констант в один параметр функции - C++
здраствуйте! иногда в примерах програмного кода замечаю, что несколько констант передаются в один парметр функции с помщью битового или....

Создать функцию, которой строка передаётся как параметр, и которая возвращает количество слов - C++
создать функцию в которой строка передаётся как аргумент и возвращает количество слов


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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