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

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

Войти
Регистрация
Восстановить пароль
 
 
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Будет ли работать должным образом конструктор копирование с указателем? - C++

02.03.2013, 04:39. Просмотров 639. Ответов 16
Метки нет (Все метки)

C++
1
2
3
4
5
class A
{
    A() {}
    A(const A *);
}
То что этот код скомпилируется - сомнений нет. Вот есть сомнения по поводу его "работоспособности".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2013, 04:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Будет ли работать должным образом конструктор копирование с указателем? (C++):

Поиск осущевствляется должным образом - C++
Выполняется следующая часть кода void interface () { int n, Width, Height, request2,i; bool selection; cout << "Введите...

Условие цикла не работает должным образом - C++
я добавил коментарий на том цикле ,где начало должно быть с 0 ,а не 5 так в чем собственно ошибка и как ее обойти? for...

Как изменить код программы чтобы все условия выполнялись должным образом? - C++
Здравствуйте! Вот код программы: #include <iostream> #include <time.h> #include <math.h> using namespace std; int t; ...

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

Конструктор копирования для класса с указателем на абстрактный класс - C++
Всем привет. Как реализовать конструктор копирования для класса Foo? class Base { public: ... ...

Что будет с указателем после использования операции delete? - C++
Имеется код: #include <iostream> using namespace std; int main() { int *wtf_ptr; wtf_ptr=new int(8);

16
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6511 / 3148 / 308
Регистрация: 04.12.2011
Сообщений: 8,718
Записей в блоге: 5
02.03.2013, 04:57 #2
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
2
3
4
5
class A
{
    A() {}
    A(const A *);
}
То что этот код скомпилируется - сомнений нет. Вот есть сомнения по поводу его "работоспособности".
Вопрос только в том, зачем он Вам нужен. Если нужен то и ладно.
Стандартный копирующий конструктор нужен для передачи по значению, и для возврата значения. При инициализации объекта объектом тоже. То есть, он часто неявно вызывается. Такой, конструктор принимает ссылку на экземпляр read-only.
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.03.2013, 05:00  [ТС] #3
я просто побайтово копирую память для шаблона, всё компилируется а вот как проверить на работоспособность не знаю...

Добавлено через 22 секунды
С сылкой не получается... поэтому вопрос и возник.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6511 / 3148 / 308
Регистрация: 04.12.2011
Сообщений: 8,718
Записей в блоге: 5
02.03.2013, 05:15 #4
Цитата Сообщение от xtorne21st Посмотреть сообщение
я просто побайтово копирую память для шаблона, всё компилируется а вот как проверить на работоспособность не знаю...
Добавлено через 22 секунды
С сылкой не получается... поэтому вопрос и возник.
Как я понимаю, конструктор копий это конструктор который принимает ссылку по определению. То есть, другие конструктора могут иметь место, но если не определен копирующий, то будет использоваться по умолчанию.
0
Kuzia domovenok
2050 / 1895 / 173
Регистрация: 25.03.2012
Сообщений: 6,516
Записей в блоге: 1
02.03.2013, 05:19 #5
Цитата Сообщение от xtorne21st Посмотреть сообщение
С сылкой не получается... поэтому вопрос и возник.
так показывай код, который не получается. С указателем вряд ли выйдет...
просто потому что синтаксис не подходит
C++
1
2
3
4
A item;
A copied(item);//не сработает, т.к. твой конструктор ожидает указатель в качестве аргумента, а компилятор 
//без тебя не догадается, что к item надо применить оператор взятия адреса.
A copied2(&item);
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.03.2013, 05:22  [ТС] #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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <cstdlib>
 
template <typename V>
class Vector
{
    public:
        Vector();
        ~Vector();
        Vector(unsigned int);
        Vector(const Vector *);
 
    private:
        V* vec_ptr;
 
        size_t vec_size;
};
 
// Стандартный деструктор
template <typename V>
Vector<V>::~Vector()
{
    if (vec_ptr)
        delete [] vec_ptr;
}
 
// Конструктор.
template <typename V>
Vector<V>::Vector()
{
    vec_ptr = NULL;
    vec_size = 0;
}
 
// Конструктор копии.
template <typename V>
Vector<V>::Vector(const Vector* obj)
{
    if (vec_ptr) 
        delete [] vec_ptr;
 
    vec_size = obj.vec_size;
    vec_ptr = new V[vec_size];
    
    char* t = reinterpret_cast<char*>(vec_ptr);
    const char* f = reinterpret_cast<const char*>(obj);
    for (int i = 0; i < sizeof(V) * vec_size; ++i)
        t[i] = f[i];
}
 
// Констуктор.
template <typename V>
Vector<V>::Vector(size_t size)
{
    vec_ptr = new V[size];
    vec_size = size;
}
 
int main()
{
}
Возможности проверить пока нет на работоспособность...
0
Kuzia domovenok
2050 / 1895 / 173
Регистрация: 25.03.2012
Сообщений: 6,516
Записей в блоге: 1
02.03.2013, 05:37 #7
Зачем тебе вообще этот конструктор??? http://ic.pics.livejournal.com/staffi/6805635/91492/91492_original.jpg
Нужен указатель на копию?
C++
1
2
3
4
Vector(const Vector& copy){
  Vector* essential_ptr=&copy;
//...
}
Цитата Сообщение от xtorne21st Посмотреть сообщение
Возможности проверить пока нет на работоспособность...
а что там проверять то?Не работает!
C++
1
2
3
4
5
int main()
{
    Vector<int> a;
    Vector<int> b(a);
}
Добавлено через 4 минуты
Цитата Сообщение от xtorne21st Посмотреть сообщение
vec_size = obj.vec_size;
obj Это УКАЗАТЕЛЬ!!! Оператор точка применять бессмысленно.
1
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.03.2013, 14:52  [ТС] #8
Да писал ночью... тупил...
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2013, 16:14 #9
Цитата Сообщение от xtorne21st Посмотреть сообщение
Будет ли работать должным образом конструктор копирование с указателем?
конструктор который принимает указатель - это не конструктор копирования, это просто конструктор с параметром

Добавлено через 3 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Стандартный копирующий конструктор нужен для передачи по значению, и для возврата значения. При инициализации объекта объектом тоже. То есть, он часто неявно вызывается. Такой, конструктор принимает ссылку на экземпляр read-only.
все верно, толко необязательно read-only
2
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6511 / 3148 / 308
Регистрация: 04.12.2011
Сообщений: 8,718
Записей в блоге: 5
02.03.2013, 16:20 #10
Цитата Сообщение от Jupiter Посмотреть сообщение
все верно, толко необязательно read-only
Обявление в формальном параметре делают const& и это не значит конечно, что сам экземпляр в коде обязательно должен быть объявлен const. А вообще, вектор и сам по себе шаблон. Копироваться умеет. Но для типов которые передаются в вектор, конструктор копии должен быть правильный. Как и др. методы, если библиотеку обобщенных алгоритмов использовать потом.
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2013, 16:24 #11
Цитата Сообщение от IGPIGP Посмотреть сообщение
Обявление в формальном параметре делают const&
именно формальный параметр необязан быть read-only
A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&,
volatile X& or const volatile X&
, and either there are no other parameters or else all other parameters
have default arguments (8.3.6). [ Example: X::X(const X&) and X::X(X&,int=1) are copy constructors.
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6511 / 3148 / 308
Регистрация: 04.12.2011
Сообщений: 8,718
Записей в блоге: 5
02.03.2013, 16:29 #12
Цитата Сообщение от Jupiter Посмотреть сообщение
именно формальный параметр необязан быть read-only
Стандарт - могучая вещь. Жаль, что в литературе это часто упрощают. Хотелось бы увидеть пример, где при копировании нет другого выхода как, одновременно, модифицировать и оригинал одним махом. Ведь всё можно сделать и порознь. Или нет?
И еще вопрос. Если объявлены оба, то будет ли это перегрузкой и какой будет вызываться неявно?
0
Kuzia domovenok
2050 / 1895 / 173
Регистрация: 25.03.2012
Сообщений: 6,516
Записей в блоге: 1
02.03.2013, 16:33 #13
Цитата Сообщение от IGPIGP Посмотреть сообщение
Стандарт - могучая вещь. Жаль, что в литературе это часто упрощают. Хотелось бы увидеть пример, где при копировании нет другого выхода как, одновременно, модифицировать и оригинал одним махом. Ведь всё можно сделать и порознь. Или нет?
может есть какие-то схемы, когда объект хранит счётчик своих копий или какую-то ещё инфу о копиях... или запрет на создание копий константных объектов... не знаю зачем это может быть надо, впрочем.
1
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2013, 16:39 #14
например ну очень плохой deprecated std::auto_ptr
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6511 / 3148 / 308
Регистрация: 04.12.2011
Сообщений: 8,718
Записей в блоге: 5
02.03.2013, 16:41 #15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
может есть какие-то схемы, когда объект хранит счётчик своих копий или какую-то ещё инфу о копиях... или запрет на создание копий константных объектов... не знаю зачем это может быть надо, впрочем.
Как я понимаю, копирующий конструктор нужен для передачи и возврата через стек. Такие вещи есть и у примитивных типов, хоть их и невидно. Локальная переменная создается и уничтожается одинаково. То есть конструктор копии обеспечивает сам механизм
0
02.03.2013, 16:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2013, 16:41
Привет! Вот еще темы с ответами:

Что будет, если new вызвать 2 раза с одним и тем же указателем? - C++
Собственно вопрос что будет? напрмер int *i=new(1); i=new(3); i будет сылаться на ячеку со значенеим 3 это ясно, а куда денется ячейка со...

Конструктор копирование - C++
Получил задание от преподавателя написать программу «Поезд» Условия такие программа предлагает ввести с клавиатуры: -Количество...

Конструктор копирование у наследника - C++
Основной класс class matrix { public: int N,M; // N - количество строк, M - количество столбцов матрицы int **pa; ...

В чем разница между указателем и указателем на указатель? - C++
int x, *p, *q; x=10; p=&amp;x; q=p; cout&lt;&lt;*q; int x, *p, **q; x=10; p=&amp;x; q=&amp;p;


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

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

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