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

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

Войти
Регистрация
Восстановить пароль
 
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
#1

Как обмануть указатель? - C++

23.07.2013, 11:32. Просмотров 340. Ответов 6
Метки нет (Все метки)

Я бы хотел сделать так, чтобы функция my_function могла менять значение value, а alien_function - нет.
Вносить изменения в код alien_function и Alien_class я не могу, поелику они написаны не мной.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
My_class
{
    Alien_class value;
}
 
Alien_class my_function(Alien_class x)
{
}
 
int main()
{
    My_class obj;
    obj.value = my_function(obj.value);
    alien_function(&obj.value);
    return 0;
}
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2013, 11:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как обмануть указатель? (C++):

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

Как правильно удалять выделенную память под указатель на указатель? - C++
есть код #include <iostream> #include <conio.h> #include <stdlib.h> #include <time.h> using namespace std; void sort_1(const...

Расскажите, как здесь работает указатель на указатель? - C++
#include "stdafx.h" #include <iostream> #include <locale.h> using namespace std; void main() { setlocale(LC_ALL, "rus"); ...

Почему указатель на указатель объявляется как float **A; - C++
Почему float?

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) - C++
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

Как передать параметр типа "указатель на указатель" в функцию? - C++
#include "stdafx.h" #include <conio.h> #include <iostream> using namespace std; #include <iomanip> using std::setiosflags; ...

6
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
23.07.2013, 11:49 #2
C++
1
2
3
alien_class alien_function(const Alien_class x)
{
}
не? или это считается за изменение?
1
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
23.07.2013, 11:56 #3
Если alien_function - это некая данность, то она уже существует и независимо от чьих-либо желаний либо изменяет аргумент, либо не изменяет, и ничего с этим не поделать. Учитывая, что она принимает указатель - скорее всего изменяет. Что до my_function, то она должна принимать ссылку на переменную:
C++
1
Alien_class my_function(Alien_class& x)
или даже
C++
1
void my_function(Alien_class& x)
, если её действие сводится только к манипуляциям с изменяемым объектом и не требует создания ещё одного объекта Alien_class.

Добавлено через 3 минуты
Ну и вдогонку очевидная мысль, но на всякий случай изображу из себя капитана: если мы хотим результаты работы alien_function, но не хотим, чтобы она изменяла какой-то наш драгоценный объект, можно делать копию этого объекта (если позволяет интерфейс Alien_class) и скармливать функции:
C++
1
2
Alien_class value2(obj.value);
alien_function(&value2);
0
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
23.07.2013, 12:43  [ТС] #4
Всем спасибо, а на верную мысль натолкнул Kukurudza
C++
1
2
3
4
5
6
7
8
9
10
11
12
void devil_function(Alien_class y)
{
    alien_function(y);
}
 
int main()
{
    My_class obj;
    obj.value = my_function(obj.value);
    devil_function(obj.value);
    return 0;
}
И пущай изменяет хоть сто раз.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.07.2013, 12:51 #5
Цитата Сообщение от Voroshek Посмотреть сообщение
на верную мысль натолкнул Kukurudza
Так это по сути и есть копия объекта. При передаче по значению объект копируется.
1
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
23.07.2013, 12:51 #6
а вообще странная запись:
Цитата Сообщение от Voroshek Посмотреть сообщение
C++
1
obj.value = my_function(obj.value);
вообще в таком случае у объекта должна быть функция по изменению валуе:
C++
1
2
3
4
5
6
class A {
    int value;
    void changeValue() {
        //меняю value видимо в зависимости от текущего значения value
    }
};
0
0x10
23.07.2013, 12:55     Как обмануть указатель?
  #7

Не по теме:

Цитата Сообщение от Kukurudza Посмотреть сообщение
а вообще странная запись:
Да тут сама постановка задачи странная. Какое-то костылестроение на ровном месте, причем мотивация не особо ясна.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2013, 12:55
Привет! Вот еще темы с ответами:

Как обмануть компилятор и "перепрыгнуть через функцию"? - C++
Известно, что адрес возврата из функции сохраняется на стеке. (В данном эксперименте мы отключим все виды инлайна в оптимизациях). Так...

Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать? - C++
Подскажите, что значит константный указатель на объект, указатель на константный объект, и как это можно использовать??

Обмануть 1 параметр - C++
Всем привет! Столкнулся с нестандартной проблемой. Написал программу test.exe, которая должна запускать другую программу с 1 параметром,...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.07.2013, 12:55
Ответ Создать тему
Опции темы

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