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

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

Войти
Регистрация
Восстановить пароль
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
#1

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

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

В классе есть массив char (не динамический) размером 40 байт.
Вопрос1: нужно ли для такого класса определять конструктор копий или перегружать оператор присваивания или вполне подойдёт конструктор копий и оператор присваивания по умолчанию???
Вопрос2:Если в объект вышеописанного класса присвоить другому объекту того же класса, то верно ли, что при этом адрес массива в обоих объектах будет одинаковым или они будут ссылаться на разные участки памяти?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2012, 14:42     Конструктор копий. Оператор присваивания
Посмотрите здесь:

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

Конструктор копирования и оператор присваивания - C++
Не понимаю, когда используется один, а когда другой. Написал простой пример с комплексными числами - при компиляции в VS2010 и CodeBlock 10...

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

Перемещающий конструктор и оператор перемещающего присваивания - C++
Правильно у меня написаны перемещающий конструктор и оператор присваивания? И исправьте ошибку в операторе "ссылка rvalue не может быть...

Про конструктор копирования, оператор присваивания - C++
Объясните, пожалуйста, принцип действия конструктора копирования и операции присваивания. На что указывает указатель this в этих функциях?...

Очередь, конструктор копирования и перегруженный оператор присваивания - C++
#include <iostream> using namespace std; typedef char type; struct Node { type element; Node *pNext; };

Конструктор копирования и оператор присваивания - общая часть, выделять ли в отдельный метод - C++
Как лучше? // конструктор копирования Fraction::Fraction( const Fraction& rhs ) { // инициализируем данными параметра функции и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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++
#include <iostream> using namespace std; struct SNode { SNode*next; int val; SNode(){} SNode(SNode*...

Нужно ли реализовать также отдельно конструктор копирования, если имеется перегруженный оператор присваивания? - C++
у меня есть класс. и прототип перегруженной операции присваивания some_class& some_class::operator=(const some_class& some_object); ...

Конструктор копий - C++
Добрый день, изучая работу со списками и классы, дошел до такой проблемы: Нужно было создать односвязный список и продлить его же...

Конструктор копий - C++
Добрый день! Пытаюсь разобраться с конструктором копий, а именно: когда его использовать и как реализовать. С первым, вроде как,...

Конструктор копий - C++
Можно ли вызвать в конструкторе копий, конструктор, если объекту нечего передавать? Класс - абстрактный. В конструкторе идет подсчет...


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

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

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