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

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

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

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

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

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

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

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

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

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

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

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

Соответственно, здесь
C++
1
2
*width = a;
*height = b;
присваиваются значения
1
Убежденный
Ушел с форума
Эксперт С++
15786 / 7223 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
29.06.2013, 12:31 #3
"width = x" - это присвоение значения x указателю width.
А "*width = x" - это присвоение значения x ячейке, на которую указывает указатель width.
1
Expocooky
56 / 56 / 2
Регистрация: 06.06.2013
Сообщений: 112
29.06.2013, 12:31 #4
Это указатели. Для того чтобы записать значение, нужно сначала перейти по адресу, лежащему в указателе, с помощью оператора *
1
Убежденный
Ушел с форума
Эксперт С++
15786 / 7223 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 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))
{
}
2
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)
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 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 минут

Не по теме:

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

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

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

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

Очень хорошо про это написано у Герба Саттера в книге "Решение сложных
задач на С++", а также в книге "С++ сборник рецептов" (Д. Стефенс,
К. Диггинс, Д. Турканис, Д. Когсуэлл).
1
29.06.2013, 15:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2013, 15:59
Привет! Вот еще темы с ответами:

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

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

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

присвоение значения - C++
Здравствуйте! можно ли каким-нибудь образом присвоить значению int значение char? К примеру: у меня есть массив типа int, нужно найти...


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

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

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