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

Передача объекта параметром и последующее изменение - 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 ...
Картинка C++
Помогите написать код - нужно при нажатии на 1ю кнопку выходила 1я картинка, при нажатии на 2ю кнопку - 2я картинка.
C++ Проверка на четность http://www.cyberforum.ru/cpp-beginners/thread89752.html
Возникло 2 вопроса . Как проверить многозначное целое число на четность разрядов? Как рассмотреть разряды этого числа попарно как последовательности из пар чисел. Заранее благодарен!
C++ Странное условие задания У Дейтлов есть задачка: Компания хочет передавать данные по телефону, но она обеспокоена возможностью телефонного перехвата. Все передаваемые данные являются четырехзначными целыми числами.... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18258 / 6383 / 440
Регистрация: 30.03.2009
Сообщений: 17,666
Записей в блоге: 28
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, поскольку он уже только инициализирует, но новый экземпляр не создаёт. Всё это можно было бы написать в виде одной строки, как я указал выше

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

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