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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.67
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
#1

Копирующий конструктор - C++

14.01.2011, 20:03. Просмотров 5165. Ответов 4
Метки нет (Все метки)

Здравствуйте, кто нибудь может сказать, почему при создании копирующего конструктора нужно указывать ссылку на объект?
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
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
using namespace std;
 
 
 
class DArray {
public:
    friend void copyConstruct(DArray da);
    DArray(int nLengthOfArray = 0) : nLength(nLengthOfArray), pArray(nullptr) 
    {
        cout << "Создание DArray размером" << nLength << endl;
        if(nLength > 0) {
            pArray = new int[nLength];
        }
    
    }
    DArray(DArray& duhas) {
        cout << "Копирование DArray размером" << duhas.nLength << endl;
        copyDArray(duhas);
    }
protected:
    int nLength;
    int* pArray;
    void copyDArray(const DArray& da);
    void deleteDArray();
};
 
void copyConstruct(DArray da) {
 
}
 
 
int main(int argc, char** argv) {
    setlocale(0,"Russian");
    // Объявляем объект класса DArray
    DArray da(58);
    copyConstruct(da);
 
 
    system("pause >> void");
    return 0;
}
Просто не могу понять, почему нельзя без ссылке в классе в копирующем конструкторе объявить объект, понять интересно, заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2011, 20:03     Копирующий конструктор
Посмотрите здесь:

Копирующий конструктор - C++
Помогите пожалуйста реализовать копирующий конструктор, у меня он выдает нули =\ Вот код: #include &lt;iostream&gt; #include...

Копирующий конструктор - C++
Добрый вечер всем! Следущая проблема - решила создать свой персональный vector - int_array. Но возникла проблема... Не пойму, как...

копирующий конструктор !!! - C++
Вот это верный вид конструктора копирования??? class VK{ int b; public: VK(const VC &amp;); } VL::VK(const VK &amp; tmp){ b=tmp.b; ...

Копирующий конструктор - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;sstream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; #include&lt;string&gt; #include&lt;limits&gt; ...

Закрытый копирующий конструктор - C++
В данном упражнении описана методика, которая может помочь отказаться от копирующих конструкторов. Создайте класс Х и объявите (но не...

копирующий конструктор и иерархия - C++
Создать иерархию типов, описывающую - студента, отца семейства и студента-отца семейства. Классы должны конструкторы, включая конструктор...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
14.01.2011, 20:15     Копирующий конструктор #2
Такой формат копирующего конструктора.
Цитата Сообщение от BTR Посмотреть сообщение
Просто не могу понять, почему нельзя без ссылке в классе в копирующем конструкторе объявить объект, понять интересно
Магистра Йоды тайна речи известна стала?
Можно объявлять совсем без конструктора копирования. Гугл, например, вообще рекомендует не делать такие конструкторы.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.01.2011, 01:31     Копирующий конструктор #3

Не по теме:

Цитата Сообщение от lemegeton Посмотреть сообщение
Гугл, например, вообще рекомендует не делать такие конструкторы
А что он рекомендует, если мне надо создать копию объекта? Или позарез надо передать в функцию объект по значению?



Добавлено через 2 минуты
BTR, ссылку надо указывать потому, что если вы будете передавать объект по значению, то для него при передаче будет вызван копирующий конструктор. Т.е. получится бесконечная рекурсия (для того, чтобы вызвать копирующий конструктор, нужно в него передать копию объекта, а чтобы её создать, нужно вызвать копирующий конструктор).

Добавлено через 1 минуту
Цитата Сообщение от BTR Посмотреть сообщение
Просто не могу понять, почему нельзя без ссылке в классе в копирующем конструкторе объявить объект
Ну объявите вы объект. В копирующем конструкторе. И что? Этот пустой объект будете копировать? Какая же это тогда копия?
lemegeton
15.01.2011, 01:46
  #4

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
А что он рекомендует, если мне надо создать копию объекта? Или позарез надо передать в функцию объект по значению?
В первом случае сделать метод CopyFrom(ClassName &source), во втором случае сделать клон и передать по ссылке или указателем. Ну и это, в конце-концов не правило, а настойчивая рекомендация, позволяющая избежать ошибок. В некоторых классах по смыслу без копирования не обойтись.

Цитата Сообщение от silent_1991 Посмотреть сообщение
Ну объявите вы объект. В копирующем конструкторе. И что? Этот пустой объект будете копировать? Какая же это тогда копия?
О, я смотрю, месьё поднатарел в криптографии... Я только приблизительный смысл фразы ТС понял. Хотя у меня давно на хрустальный шар гарантия вышла.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2011, 01:54     Копирующий конструктор
Еще ссылки по теме:

Копирующий конструктор абстрактного класа - C++
Добрый вечер. Сразу к делу. Есть абстрактный класс: class Product abstract { protected: int lipids; string brand; ...

Когда в классе нужен копирующий конструктор? - C++
Меня интересует вопрос когда в классе нужен копирующий конструктор.

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....


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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.01.2011, 01:54     Копирующий конструктор #5

Не по теме:

Цитата Сообщение от lemegeton Посмотреть сообщение
О, я смотрю, месьё поднатарел в криптографии

Если я, конечно, правильно понял смысл фразы, то ответ будет таки, какой я дал. А если не правильно, то хренова ещё моя криптография



Добавлено через 2 минуты
Цитата Сообщение от lemegeton Посмотреть сообщение
В некоторых классах по смыслу без копирования не обойтись
Ну в них, собственно, по-моему, и надо писать копирующие конструкторы. А в других да, можно обойтись и без них. Я вообще придерживаюсь такого правила - если в классе есть указатель и динамическое выделение памяти под него - надо писать конструктор копии.
Yandex
Объявления
15.01.2011, 01:54     Копирующий конструктор
Ответ Создать тему
Опции темы

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