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

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

Войти
Регистрация
Восстановить пароль
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
#1

Что за присвоение? - C++

29.06.2013, 12:24. Просмотров 335. Ответов 7
Метки нет (Все метки)

вот код с http://www.cplusplus.com/doc/tutorial/classes/
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
class CRectangle {
    int *width, *height;
  public:
    CRectangle (int,int);
    ~CRectangle ();
    int area () {return (*width * *height);}
};
 
CRectangle::CRectangle (int a, int b) {
  width = new int;
  height = new int;
  *width = a;
  *height = b;
}
 
CRectangle::~CRectangle () {
  delete width;
  delete height;
}
всё понятно кроме
C++
1
2
*width = a;
*height = b;
почему не просто
C++
1
2
width = a;
height = b;
?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2013, 12:24     Что за присвоение?
Посмотрите здесь:

вывод, присвоение - C++
если я хочу присвоить переменной не число, а слово, то какой тип надо писать? string? при выводе из файла мне нужно посчитать количество...

Присвоение указателей - C++
Здарствуйте. Например я пишу пользовательский контейнер (класс шаблон). Узел будет содержать ключ, данные и т.д. я объявляю ключ...

Присвоение структур - C++
Помогите пожалуйста такая проблема address *p; p = new address; p-&gt;surname = surname; ...

Присвоение в цикле - C++
Так выглядит условие задачи: Написать программу нахождения средней температуры за неделю и подсчета количества теплых и холодных дней....

Не выполняет присвоение - C++
вопрос в комментариях. game::game(int size_team_, int begin_counter): size_team(size_team_) { srand(time(NULL)); Tunit...

Присвоение типов в С++ - C++
Как присвоить елементам массива mas_a елементы строки String.Массив имеет тип int,а String char?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
29.06.2013, 12:31     Что за присвоение? #2
width, height - это адреса указателей
*width, *height - значения.

Соответственно, здесь
C++
1
2
*width = a;
*height = b;
присваиваются значения
Убежденный
Системный программист
Эксперт С++
15237 / 6869 / 1088
Регистрация: 02.05.2013
Сообщений: 11,246
Завершенные тесты: 1
29.06.2013, 12:31     Что за присвоение? #3
"width = x" - это присвоение значения x указателю width.
А "*width = x" - это присвоение значения x ячейке, на которую указывает указатель width.
Expocooky
56 / 56 / 2
Регистрация: 06.06.2013
Сообщений: 112
29.06.2013, 12:31     Что за присвоение? #4
Это указатели. Для того чтобы записать значение, нужно сначала перейти по адресу, лежащему в указателе, с помощью оператора *
Убежденный
Системный программист
Эксперт С++
15237 / 6869 / 1088
Регистрация: 02.05.2013
Сообщений: 11,246
Завершенные тесты: 1
29.06.2013, 12:33     Что за присвоение? #5
А вместо этого:
C++
1
2
3
4
5
6
CRectangle::CRectangle (int a, int b) {
  width = new int;
  height = new int;
  *width = a;
  *height = b;
}
Лучше так:
C++
1
2
3
4
CRectangle::CRectangle (int a, int b) :
    width(new int(a)), height(new int(b))
{
}
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
29.06.2013, 12:45  [ТС]     Что за присвоение? #6
Цитата Сообщение от Убежденный Посмотреть сообщение
"width = x" - это присвоение значения x указателю width.
А "*width = x" - это присвоение значения x ячейке, на которую указывает указатель width.
вот это мне прояснило ситуацию!
Цитата Сообщение от Убежденный Посмотреть сообщение
Лучше так:
CRectangle::CRectangle (int a, int b) :
width(new int(a)), height(new int(b))
{
}
стильная запись) а что означает " : " после CRectangle (int a, int b)
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
29.06.2013, 13:45     Что за присвоение? #7
Цитата Сообщение от soican Посмотреть сообщение
что означает " : "
Список инициализации конструктора, все поля класса инициализируются с помощью него.

Не по теме:

Цитата Сообщение от Убежденный Посмотреть сообщение
C++
1
2
CRectangle::CRectangle (int a, int b)
   : width(new int(a)), height(new int(b)) { }
Такой вопрос: будет ли утечка памяти, если new int(b) выкинет bad_alloc?



Добавлено через 18 минут

Не по теме:

Да, будет, туплю, вопрос снимается)

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2013, 15:59     Что за присвоение?
Еще ссылки по теме:

Присвоение значений - C++
В течение работы программы в строковую переменную а1 случайным образом приходят имена переменных, объявленных в данной программе. Этим...

присвоение typeid - C++
При использовании cout&lt;&lt;typeid(/*...*/).name()&lt;&lt;&quot;\n&quot;; выдается что переменная входит в класс, например, Object Есть ли возможность...

Присвоение значений - C++
Всем доброго времени суток, подскажите как присвоить переменной такое значение? 48847E5536130C10

Присвоение структуре имя - C++
Вообщем как всегда запутался я на простых вещах :wall: Почему я не могу присвоить g.fullname *name? файл 1: #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
Эксперт С++
15237 / 6869 / 1088
Регистрация: 02.05.2013
Сообщений: 11,246
Завершенные тесты: 1
29.06.2013, 15:59     Что за присвоение? #8
Цитата Сообщение от gray_fox Посмотреть сообщение
Такой вопрос: будет ли утечка памяти, если new int(b) выкинет bad_alloc?
Будет. И это очень хороший вопрос.

Надежная реализация конструктора должна обрабатывать такую ситуацию.
Например, обернуть операции выделения памяти в блок try-catch, а в случае
исключения подчистить за собой и пробросить исключение дальше.

Другой вариант связан с использованием умных указателей, которые сами
управляют временем жизни объекта и уничтожают его в нужные моменты.

Очень хорошо про это написано у Герба Саттера в книге "Решение сложных
задач на С++", а также в книге "С++ сборник рецептов" (Д. Стефенс,
К. Диггинс, Д. Турканис, Д. Когсуэлл).
Yandex
Объявления
29.06.2013, 15:59     Что за присвоение?
Ответ Создать тему
Опции темы

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