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

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

Войти
Регистрация
Восстановить пароль
 
Android256
Сообщений: n/a
#1

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

19.12.2010, 22:09. Просмотров 949. Ответов 3
Метки нет (Все метки)

Здраствуйте! Ниже приведено 2 исходника. Подскажите, пожалуйста, в котором из них нужно вставить конструктор копирования, или может быть в обеих? Примеры простые, но я никак не могу понять, в каких случаях надо использовать конструктор копирования. С прочитанной литературы я может быть ошибочно решил, что конструктор копирования используется только при выделении динамической памяти, во время использования оператора new.

Исходник 1:
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
#include <iostream>
using namespace std;
 
class ClassName
{
    public:
        ClassName()
        {
            cout<<"ClassName!!!\n";
        }
        ~ClassName()
        {
            cout<<"~ClassName!!!\n";
        }
};
void f(ClassName o)
{
    cout<<"Function f!!!\n";
}
void main()
{
    ClassName c1;
    f(c1);
}
Исходник 2:
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
#include <iostream>
#include <string.h>
using namespace std;
 
class student
{
    public:
        student()
        {
            cout<<"class student\n";
        }
        ~student()
        {
            cout<<"~class student\n";
        }
};
void function2(student *C)
{
    cout<<"In function2\n";
}
void main()
{
    student *C;
    C=new student();
 
    function2(C);
    delete C;
}
 Комментарий модератора 
Используйте теги форматирования кода.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2010, 22:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор копирования (C++):

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования - C++
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; #include &lt;algorithm&gt; using...

Конструктор инициализации, конструктор копирования, деструктор - C++
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор - C++
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

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

Конструктор копирования - C++
class alpha { public: alpha(alpha&amp; a) { //код } }; Подскажите, почему компилятор ругается если я пытаюсь передать...

3
deadlock
376 / 355 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
19.12.2010, 22:13 #2
любой конструктор вызывается при выделении памяти при помощи new, конструктор копирования создается автоматически (хотя никто не мешает его определить и руками)
0
Android256
Сообщений: n/a
19.12.2010, 22:30 #3
Спасибо за ответ, но я еще больше запутался. Вот смотри: если мы создаем объект "A",выделив при этом для него память с пом.new, передаем его в Функцию, то создается отдельная копия этого объекта (назовем ее формально "Acopy"), которая будет указывать на выделенную память под исходный объект А. После того, когда функция завершит свое выполнение, копия объекта "Аcopy" с пом. деструктора разрушиться, при этом она разрушит память, на которую она указывала, т.е. память объекта "А". А если память под объект "A" разрушиться, то, соответственно у нас преждевременно разрушиться сам объект "A". Поэтому, как я понимаю, нужен констр коп. И указывать его вручную, наверное, стоит.
Тем более, деструктор всегда надо указывать в программе, а после выполнения программы, количество деструкторов д.б равным количеству конструкторов. Если я не прав, то ответь, пожалуйста.
deadlock
376 / 355 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
20.12.2010, 08:28 #4
то, что ты описал:
C++
1
2
3
typename *A=new typename; //"мы создаем объект "A""
void F(A); //"передаем его в Функцию"
//если внутри функции ты не делал delete A; то после завершения функции объект А продолжает //жить, его копия внутри функции уничтожена
Цитата Сообщение от Android256 Посмотреть сообщение
Тем более, деструктор всегда надо указывать в программе
не обязательно, он будет создан автоматически, если не указан руками
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2010, 08:28
Привет! Вот еще темы с ответами:

Конструктор копирования - C++
Здравствуйте) объясните пожалуйста в чём проблема при описании в классе конструктора копирования компилятор выдаёт ошибку:error C3699:...

Конструктор копирования - C++
#include &lt;iostream&gt; using namespace std; class test { public: int x; test(int num); test(const...

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

Конструктор копирования - C++
Всем привет. У меня такая проблема: есть некий класс, допустим Test: class Test { protected: int value; ...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
20.12.2010, 08:28
Ответ Создать тему
Опции темы

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