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

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

Войти
Регистрация
Восстановить пароль
 
helloy
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 46
#1

Закрытый копирующий конструктор - C++

22.12.2013, 00:42. Просмотров 287. Ответов 4
Метки нет (Все метки)

В данном упражнении описана методика, которая может помочь отказаться от копирующих конструкторов. Создайте класс Х и объявите (но не определяйте!) закрытый копирующий конструктор. Объявите открытую функцию clone() как константную функцию класса, которая возвращает копию объекта, созданную оператором пеw. Напишите функцию, получающую аргумент const Х и вызывающую clone() для создания локальной копии, которая может модифицироваться. Недостаток такого решения состоит в том, что вы отвечаете за уничтожение копии (вызовом delete) после завершения работы с ней.
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
class X{
    X(X & obj);//ошибка
public:
    X(){}
    X clone()const{
        X*temp=new X;
        *temp=*this;
        return *temp;
    }
 
};
 
 
void Func1(const X & obj){
    obj.clone();// как освободить и использовать delete
    
}
 
 
int  main() {
    X obj;
    Func1(obj);
    return 0;
}
подправьте код
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2013, 00:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Закрытый копирующий конструктор (C++):

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

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

Копирующий конструктор - C++
Здравствуйте, кто нибудь может сказать, почему при создании копирующего конструктора нужно указывать ссылку на объект? #include...

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

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

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

4
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
22.12.2013, 01:11 #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
29
#include <iostream>
 
class X
{
    X(X &);//ошибка
 
public:
    X(){}
 
    const X* clone()const
    {
        const X* obj = new X;
        obj = this;
        return obj;
    }
};
 
X* Func1(const X& obj)
{
    return const_cast<X*>(obj.clone());// как освободить и использовать delete
}
 
int main()
{
    X obj;
    X* p_obj2 = Func1(obj);
 
    return 0;
}
Добавлено через 6 минут
Точнее так:
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
#include <iostream>
 
class X
{
    X(X &);//ошибка
 
public:
    X(){}
 
    X* clone()const
    {
        return new X;
    }
};
 
X* Func1(const X& obj)
{
    return const_cast<X*>(obj.clone());// как освободить и использовать delete
}
 
int main()
{
    X obj;
    X* p_obj2 = Func1(obj);
 
    delete p_obj2;
 
    return 0;
}
1
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.12.2013, 01:46 #3
Цитата Сообщение от xtorne21st Посмотреть сообщение
Точнее так:
Не догоняю... Где здесь копия объекта делается?
1
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
22.12.2013, 02:49 #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Не догоняю... Где здесь копия объекта делается?
Вчитался внимательно в условие... переделал:
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
#include <iostream>
#include <cstring>
 
class X
{
    X(const X &);
 
public:
    X(){}
 
    const X* clone()const
    {
        X* tmp = new X;
 
        memcpy(tmp, this, sizeof(X));
 
        return tmp;
    }
};
 
X* Func1(const X& obj)
{
    return const_cast<X*>(obj.clone());
}
 
int main()
{
    X obj;
    X* p_obj2 = Func1(obj);
 
    delete p_obj2;
 
    return 0;
}
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.12.2013, 02:49 #5
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
#include <iostream>
 
class X
{
  X(const X &);
 
public:
    X()
    {
    }
 
    X* clone() const
    {
      X* obj = new X();
      *obj = *this;
      return obj;
    }
};
 
X* Func1(const X& obj)
{
    return obj.clone();
}
 
int main()
{
  X obj;
  X* objCopy = Func1(obj);
  delete objCopy;
  return 0;
}
memcpy для копирования не всегда подходит.
проще воспользоваться operator =. Его запрещать не просили.
0
22.12.2013, 02:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2013, 02:49
Привет! Вот еще темы с ответами:

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

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

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

Копирующий конструктор класса, содержащего переменную-член указатель - C++
Практикуюсь по книге Стенли Липпмана &quot;Язык программирования C++ вводный курс&quot; 4 изд. Упражнение 13.4. Используя приведенный ниже набросок...


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

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

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