12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
1

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

04.09.2012, 14:42. Показов 1156. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В классе есть массив char (не динамический) размером 40 байт.
Вопрос1: нужно ли для такого класса определять конструктор копий или перегружать оператор присваивания или вполне подойдёт конструктор копий и оператор присваивания по умолчанию???
Вопрос2:Если в объект вышеописанного класса присвоить другому объекту того же класса, то верно ли, что при этом адрес массива в обоих объектах будет одинаковым или они будут ссылаться на разные участки памяти?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2012, 14:42
Ответы с готовыми решениями:

Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка
Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка. ...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор...

Конструктор копий и перегруженный оператор копирования
Привет! Изучил конструктор копий и перегруженный оператор копирования. Но не могу понять зачем в...

Оператор присваивания через конструктор
Здравствуйте! Насколько плохо (или совсем не плохо) реализовывать операторы присваивания через...

11
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.09.2012, 14:46 2
bgm313, 1) Подойдут.
2) На разные.
1
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 14:58  [ТС] 3
Цитата Сообщение от ForEveR Посмотреть сообщение
1) Подойдут.
2) На разные.
Можете объяснить почему так. По моим представлениям массив это константный указатель, а оператор присваивание просто адрес одного массива присваивает другому.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.09.2012, 14:59 4
bgm313, Это массив, а не указатель. Делается копирование элементов массива.
1
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 15:04  [ТС] 5
Массив это разме не тоже самое, что, например, char * const val?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.09.2012, 15:05 6
bgm313, Очевидно нет. Массив не является указателем. Он может приводиться к указателю, но сам является массивом.
0
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 15:10  [ТС] 7
Цитата Сообщение от ForEveR Посмотреть сообщение
bgm313, Очевидно нет. Массив не является указателем. Он может приводиться к указателю, но сам является массивом.
А чем они отличаются вы можете сказать? Такому указателю, который я описал выше необходимо присвоить алрес при объявлении, который далее нельзя изменять.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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.
1
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 15:19  [ТС] 9
Цитата Сообщение от ForEveR Посмотреть сообщение
Я даже не могу объяснить чем отличаются абсолютно разные сущности.
Я немного подумал) Вот смотрите, если массив объявлен допустим из 40 элементов, то компилятор гарантировано не отдаст ни одну из этих ячеек памяти на стеке кому-то другому. Но, если мы имеем констатный указатель, то любая из ячеек на, который он указывает, если она не занята, может быть кому-то отдана. Может быть этим?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.09.2012, 15:26 10
Но, если мы имеем констатный указатель, то любая из ячеек на, который он указывает, если она не занята, может быть кому-то отдана
Смысла фразы не понял абсолютно.
0
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 16:01  [ТС] 11
Допустим в программе объявляется переменная. И если у нас есть константный указатель, то программа
может разместить эту переменную, например, в том месте, куда ссылается указатель. А если у нас есть массив из 40 элементов, то cpp гарантировано, не разместит эту переменную, ни в одной из этих ячеек.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
08.09.2012, 21:54 12
bgm313, если указатель не инициализирован, то он и указывает непонятно куда. Там может оказаться всё, что угодно, и эта память вообще может оказаться не принадлежащей вашей программе. Если же указатель указывает на выделенный по правилам блок памяти, то этот блок наверняка никто другой уже забрать и использовать не сможет, как и в случае с массивом.
0
08.09.2012, 21:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2012, 21:54
Помогаю со студенческими работами здесь

Конструктор копирования и оператор присваивания
Не понимаю, когда используется один, а когда другой. Написал простой пример с комплексными числами...

Конструктор копирования и оператор присваивания
Есть класс (синтетический, создан для примера) class Object { private: int a; float...

Оператор присваивания через конструктор копирования
Возник такой вопрос. Как перегрузить оператор присваивания для класса через конструктор...

Про конструктор копирования, оператор присваивания
Объясните, пожалуйста, принцип действия конструктора копирования и операции присваивания. На что...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru