Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 20.03.2018
Сообщений: 13
1

НЕ вызывается конструктор копирования

20.03.2018, 00:57. Показов 1058. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
НЕ вызывается конструктор копирования (не явно), как сделать чтобы это было явно?

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <string>
using namespace std;
 
class Addres
{
private:
    const char* name;
    const char* street;
    int house_number;
public:
    Addres() : name("None"), street("None"), house_number(NULL)
    {
        cout << "Конструктор без параметрів викликаний для об'єкта " << this << endl;
    };
    Addres(const char* name, const char* street, const int house_number)
    {
        cout << "Конструктор з параметрами викликаний для об'єкта " << this << endl;
        this->name = name;
        this->street = street;
        this->house_number = house_number;
    };
    Addres(const Addres &object)
    {
        cout << "Конструктор копіювання викликаний для об'єкта " << this << endl;
        this->name = object.name;
        this->street = object.street;
        this->house_number = object.house_number;
    };
    ~Addres()
    {
        cout << "Деструктор викликаний для об'єкта " << this << endl;
    };
 
    void setName(const char* name)
    {
        this->name = name;
    }
    void setStreet(const char* street)
    {
        this->street = street;
    }
    void setHouseNumber(const int house_number)
    {
        this->house_number = house_number;
    }
 
    const char* getName() { return name; }
    const char* getStreet() { return street; }
    int getHouseNumber() { return house_number; }
 
    string print()
    {
        return "Name: " + string(name) + "\nStreet: " + string(street) + "\nHouse number: " + to_string(house_number);
    }
};
 
int main()
{
    setlocale(LC_ALL, "Ukr");
 
    string(Addres::*ptrPrint)();
    ptrPrint = &Addres::print;
 
    const int LENGHT = 1;
    Addres *dynamicArray = new Addres[LENGHT]{ Addres("Yura Franasyuk", "15kvitna", 7) };
    Addres staticArray[LENGHT];
 
    staticArray[0] = dynamicArray[0];
 
    delete[] dynamicArray;
 
    cout << (staticArray[0].*ptrPrint)() << endl << endl;
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2018, 00:57
Ответы с готовыми решениями:

Когда вызывается конструктор копирования?
Пожалуйста помогите ответить на вопрос &quot;Когда вызывается конструктор копирования?&quot;

Почему не вызывается конструктор копирования?
...У меня в книге описаны случаи при которых вызывается конструктор копирования. Один из этих...

ООП Конструктор копирования вызывается сам
Столкнулся с такой проблемой. Еще до создания новых объектов Python - вызывается конструктор...

Сколько раз вызывается конструктор копирования
Почему n не увеличивается? Point(const Point&amp; src){ n++; set(src.x+1, src.y+1); cout &lt;&lt;...

3
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
20.03.2018, 01:12 2
Цитата Сообщение от Юра Франасюк Посмотреть сообщение
как сделать чтобы это было явно?
C++
1
Addres obj(staticArray[0]);
1
0 / 0 / 0
Регистрация: 20.03.2018
Сообщений: 13
20.03.2018, 01:22  [ТС] 3
Можно как-то сделать чтобы эта операция была явной?
C++
1
staticArray[0] = dynamicArray[0];
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
20.03.2018, 01:25 4
Лучший ответ Сообщение было отмечено Юра Франасюк как решение

Решение

Цитата Сообщение от Юра Франасюк Посмотреть сообщение
Можно как-то сделать чтобы эта операция была явной?
Определи оператор присваивания в классе, будет явной.
1
20.03.2018, 01:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2018, 01:25
Помогаю со студенческими работами здесь

Почему не вызывается конструктор копирования при возврате объекта из функции
Добрый день! Насколько мне известно, конструктор копирования вызывается: 1) при передачи...

В каких случаях вызывается конструктор копирования, и стоит ли вообще об этом думать?
В книге Г. Шилдта написано, что конструктор копирования может неявно вызываться, при инициализации...

Будет ли утрачена память, когда конструктор копирования вызывается для уже существующего объекта класса?
class A { char * v; A(); ~A(); A(const A &amp;obj); } ///////////////////// A::A() {

При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О
Вот такой кодclass A { public: A(){} virtual ~A(){} }; class C { public:


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru