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

Конструктор копий. Оператор присваивания - C++

Восстановить пароль Регистрация
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 14:42     Конструктор копий. Оператор присваивания #1
В классе есть массив char (не динамический) размером 40 байт.
Вопрос1: нужно ли для такого класса определять конструктор копий или перегружать оператор присваивания или вполне подойдёт конструктор копий и оператор присваивания по умолчанию???
Вопрос2:Если в объект вышеописанного класса присвоить другому объекту того же класса, то верно ли, что при этом адрес массива в обоих объектах будет одинаковым или они будут ссылаться на разные участки памяти?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.09.2012, 14:46     Конструктор копий. Оператор присваивания #2
bgm313, 1) Подойдут.
2) На разные.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 14:58  [ТС]     Конструктор копий. Оператор присваивания #3
Цитата Сообщение от ForEveR Посмотреть сообщение
1) Подойдут.
2) На разные.
Можете объяснить почему так. По моим представлениям массив это константный указатель, а оператор присваивание просто адрес одного массива присваивает другому.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.09.2012, 14:59     Конструктор копий. Оператор присваивания #4
bgm313, Это массив, а не указатель. Делается копирование элементов массива.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 15:04  [ТС]     Конструктор копий. Оператор присваивания #5
Массив это разме не тоже самое, что, например, char * const val?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.09.2012, 15:05     Конструктор копий. Оператор присваивания #6
bgm313, Очевидно нет. Массив не является указателем. Он может приводиться к указателю, но сам является массивом.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 15:10  [ТС]     Конструктор копий. Оператор присваивания #7
Цитата Сообщение от ForEveR Посмотреть сообщение
bgm313, Очевидно нет. Массив не является указателем. Он может приводиться к указателю, но сам является массивом.
А чем они отличаются вы можете сказать? Такому указателю, который я описал выше необходимо присвоить алрес при объявлении, который далее нельзя изменять.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.09.2012, 15:14     Конструктор копий. Оператор присваивания #8
bgm313, Я даже не могу объяснить чем отличаются абсолютно разные сущности... Ну как бэ... Чем отличается пиво и чипсы? Вырезка из стандарта про массивы.

In a declaration T D where D has the form
D1 [ constant-expressionopt ] attribute-specifier-seqopt
and the type of the identifier in the declaration T D1 is “derived-declarator-type-list T”, then the type
of the identifier of D is an array type; if the type of the identifier of D contains the auto type-specifier, the
program is ill-formed. T is called the array element type; this type shall not be a reference type, the (possibly
cv-qualified) type void, a function type or an abstract class type. If the constant-expression (5.19) is present,
it shall be an integral constant expression and its value shall be greater than zero. The constant expression
specifies the bound of (number of elements in) the array. If the value of the constant expression is N, the array
has N elements numbered 0 to N-1, and the type of the identifier of D is “derived-declarator-type-list array of N
T”. An object of array type contains a contiguously allocated non-empty set of N subobjects of type T. Except
as noted below, if the constant expression is omitted, the type of the identifier of D is “derived-declarator-type-
list array of unknown bound of T”, an incomplete object type. The type “derived-declarator-type-list array of
N T” is a different type from the type “derived-declarator-type-list array of unknown bound of T”, see 3.9. Any
type of the form “cv-qualifier-seq array of N T” is adjusted to “array of N cv-qualifier-seq T”, and similarly for
“array of unknown bound of T”. The optional attribute-specifier-seq appertains to the array.
Ну и про указатели.

In a declaration T D where D has the form attribute-specifier-seqopt cv-qualifier-seqopt D1
and the type of the identifier in the declaration T D1 is “derived-declarator-type-list T,” then the type of
the identifier of D is “derived-declarator-type-list cv-qualifier-seq pointer to T.” The cv-qualifiers apply to the
pointer and not to the object pointed to. Similarly, the optional attribute-specifier-seq (7.6.1) appertains to
the pointer and not to the object pointed to.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 15:19  [ТС]     Конструктор копий. Оператор присваивания #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Я даже не могу объяснить чем отличаются абсолютно разные сущности.
Я немного подумал) Вот смотрите, если массив объявлен допустим из 40 элементов, то компилятор гарантировано не отдаст ни одну из этих ячеек памяти на стеке кому-то другому. Но, если мы имеем констатный указатель, то любая из ячеек на, который он указывает, если она не занята, может быть кому-то отдана. Может быть этим?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.09.2012, 15:26     Конструктор копий. Оператор присваивания #10
Но, если мы имеем констатный указатель, то любая из ячеек на, который он указывает, если она не занята, может быть кому-то отдана
Смысла фразы не понял абсолютно.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 16:01  [ТС]     Конструктор копий. Оператор присваивания #11
Допустим в программе объявляется переменная. И если у нас есть константный указатель, то программа
может разместить эту переменную, например, в том месте, куда ссылается указатель. А если у нас есть массив из 40 элементов, то cpp гарантировано, не разместит эту переменную, ни в одной из этих ячеек.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2012, 21:54     Конструктор копий. Оператор присваивания
Еще ссылки по теме:

Очередь, конструктор копирования и перегруженный оператор присваивания C++
C++ Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания
Конструктор копий C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.09.2012, 21:54     Конструктор копий. Оператор присваивания #12
bgm313, если указатель не инициализирован, то он и указывает непонятно куда. Там может оказаться всё, что угодно, и эта память вообще может оказаться не принадлежащей вашей программе. Если же указатель указывает на выделенный по правилам блок памяти, то этот блок наверняка никто другой уже забрать и использовать не сможет, как и в случае с массивом.
Yandex
Объявления
08.09.2012, 21:54     Конструктор копий. Оператор присваивания
Ответ Создать тему
Опции темы

Текущее время: 22:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru