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

Передача объекта параметром и последующее изменение - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Возможные перестановки символов http://www.cyberforum.ru/cpp-beginners/thread89794.html
Всем, привет! Нужно вывести на экран все возможные перестановки n введенных символов. У меня получилось без рекурсии, а вот она то и должна быть использована.. Скиньте код если можна , или ссылку на похожую тему, или сайт
C++ указатели 1. Дан массив с. Отобразите на экране элементы 1 строки. 2. Распечатать введенный массив в порядке возрастания. 3. Определите количество гласных букв во введенной строке. http://www.cyberforum.ru/cpp-beginners/thread89758.html
Суммировать целые числа от 1 до 99 с помощью for C++
1. Определить значение prod и х после выполнения операции ( начальное значение x=5,prod=l) prod=*x++; 2. Суммировать целые числа от 1 до 99 с помощью for \ 3. While (с<=5;){ Рг*=с; ++с; 4. Даны целые положительные числа А и В (А < В). Вывести все целые числа от А до В включительно; при этом каждое число должно выводиться столько раз,...
Картинка C++
Помогите написать код - нужно при нажатии на 1ю кнопку выходила 1я картинка, при нажатии на 2ю кнопку - 2я картинка.
C++ Проверка на четность http://www.cyberforum.ru/cpp-beginners/thread89752.html
Возникло 2 вопроса . Как проверить многозначное целое число на четность разрядов? Как рассмотреть разряды этого числа попарно как последовательности из пар чисел. Заранее благодарен!
C++ Странное условие задания У Дейтлов есть задачка: Компания хочет передавать данные по телефону, но она обеспокоена возможностью телефонного перехвата. Все передаваемые данные являются четырехзначными целыми числами. Компания попросила вас написать программу, которая должна шифровать эти данные так, чтобы они могли передаваться с большей безопасностью. Ваша программа должна читать целые четырехзначные числа и шифровать... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17299 / 5547 / 347
Регистрация: 30.03.2009
Сообщений: 15,101
Записей в блоге: 26
26.01.2010, 22:59     Передача объекта параметром и последующее изменение
Для начала опишу более подробно, что я имел в виду в предыдущем посте:

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
class expr_Node_t
{
  // Конструктор для формирования двухаргументной операции
  expr_Node_t (const expr_Node_t *operand1, const expr_Node_t *operand2, OpKind oper);
  ...
};
...
 
expr_Node_t::expr_Node_t (const expr_Node_t *operand1, const expr_Node_t *operand2, OpKind oper)
{
     kind                = EK_BINOP;
     data.binop.kind     = oper;
     data.binop.operand1 = operand1;
     data.binop.operand2 = operand2;
}
 
...
expr_Node_t *operand1 = syntax_Primary(vars,arrays,labels);
//   ...
operand2 = syntax_Primary(vars,arrays,labels);
 
// Здесь мы создаём узел и сразу же к нему подвешиваем два уже существующих узла
// Указатель operand1 больше не нужен, ибо это только указатель. Технически этот момент
// исполняется аналогично коду
//
// expr_Node_t *tmp = malloc (...);
// tmp->constructor_expr_Node_t (operand1,operand2,OP_DIVIDE);
// operand1 = tmp
//
// Т.е. ничего у тебя не потеряется
operand1 = new expr_Node_t (operand1,operand2,OP_DIVIDE);
...
> То есть operand1 уже инициализирован на время вызова NewBinOp

operand1 - это УКАЗАТЕЛЬ. Это не объект. Он у тебя указывает на какой-то экземпляр класса, выделенный в памяти. Далее этот указатель ты передал в конструктор вновь созданного объекта. Внутри конструктора этот указатель у тебя запомнился. Теперь в operand1 мы записали указатель на вновь созданный объект. А operand1->data.binop.operand теперь смотрит туда, куда до вызова new смотрел operand1

> А моя цель была просто выделить память под объект,инициализировать её,а потом уже менять исходный объект

Не совсем понятно, зачем, но тогда это должно выглядеть так:

C++
1
2
3
tmp = new expr_Node_t;
tmp->NewBinOp (operand1,operand2,OP_DIVIDE);
operand1 = tmp;
При этом из NewBinOp выкидывается new, метод становится void и переименовывается во что-то типа InitBinOp, поскольку он уже только инициализирует, но новый экземпляр не создаёт. Всё это можно было бы написать в виде одной строки, как я указал выше

> Можно ли работать в С++ с экземпляром класса также как просто с неким отрезком памяти,также её копировать,то есть с точки зрения указателей ничего не меняется?

Можно. Но Си++ на то и разрабатывали, чтобы в программе вот таких вот ковыряний было как можно меньше. Либо приведи более конкретный пример, что ты имеешь в виду
 
Текущее время: 02:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru