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

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

Восстановить пароль Регистрация
 
 
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
18.01.2013, 00:05     Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? #1
Это можно :
C++
1
2
3
Array a(10);
a.set(0,5);
Array b(a);
А это нельзя :
C++
1
2
3
Array a(10);
Array b(20);
a = b;
Объясните пожалуйста в чем дело. Если можно, то поподробней, то есть что именно копируется, с каких мест и когда. Я только знаю, что в первом варианте можно так делать, потому что объект ещё не создан, а тонкостей не знаю(.
Вот полный код :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Array {
private:
    size_t mysize;
    int *mydata;
public:
    Array(size_t size);
    void set(int i, int val);
    int get(int i);
};
 
Array::Array(size_t size){
    mysize = size;
    mydata = new int [mysize];
}
 
void Array::set(int i, int val){
    mydata[i] = val;
}
 
int Array::get(int i){
    return mydata[i];
}
 
int main() {
    Array a(10);
    a.set(0,7);
    Array b(a); //Первый вариант
    
    Array a(10);
    Array b(20);
    b=a;        //Второй вариант
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 00:05     Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту?
Посмотрите здесь:

как присвоить значения из одного объекта другому объекту C++
C++ выделить место для объекта с помощью new или создать указатель, объект и присвоить один другому. какая разница?
Классы. Доступ к созданному объекту. C++
C++ Как возвратить указатель на объект, созданный в методе?
Указатель на целочисленный объект. Указать возможные способы доступа к этому объекту. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
19.01.2013, 13:11  [ТС]     Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? #21
Jupiter, я вас уже наверное достал, но можно последний вопрос? То есть, если бы конструктор копий принимал параметр по значению, то после Array b(a) выполнение бы пошло сразу в конструктор копий Array(Array c), который принимает параметр по значению, то есть ему нужно копировать объект, а что бы копировать объект, ему нужно запустить конструктор копий, то есть ещё раз Array(Array c) Array(Array c) и т.д. Правильно ли это?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.01.2013, 13:12     Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? #22
да. так оно и есть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 13:36     Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту?
Еще ссылки по теме:

Почему конструктор вызывается при присвоении объекта другому объекту C++
Созданный объект Array<char> удаляется, как только метод convert завершается C++
Правильно созданный глобальный объект C++

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

Или воспользуйтесь поиском по форуму:
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
19.01.2013, 13:36  [ТС]     Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? #23
Всем спасибо! И отдельное спасибо Jupiter за помощь и хорошее объяснение.
Yandex
Объявления
19.01.2013, 13:36     Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту?
Ответ Создать тему
Опции темы

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