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

В каких случаях вызывается конструктор копирования, и стоит ли вообще об этом думать? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Алгоритм быстрой сортировки - посчитать количество перестановок и сравнений элементов массивов http://www.cyberforum.ru/cpp-beginners/thread1130817.html
Помогите пожалуйста в алгоритме быстрой сортировки посчитать количество перестановок и сравнений элементов массивов. Не могу понять куда нужно счетчики встроить. void quick(int *a , int l, int r) { int x = a; int i = l; int j = r; while(i <= j) { //SravQuick++;
C++ Поиск слов в строке c++ Как в файле сделать проверку на одинаковые слова в строке http://www.cyberforum.ru/cpp-beginners/thread1130814.html
C++ Создание и обработка наборов объектов заданной структуры
У меня есть задание и написанная программа "Исходные данные: набор точек на плоскости, определяющих треугольник. Функции: 1) Определение является ли треугольник равнобедренным. 2) Подсчет площади равнобедренного треугольника. Обработка: 1)Определить с использованием первой функции номера объектов, которые имеют равнобедренные треугольники. 2) С использованием второй функции...
C++ Определить сумму положительных и число отрицательных членов данной последовательности
Задание такое: Даны натуральное число n, целые числа a1...an. Определить сумму положительных и число отрицательных членов данной последовательности. Собсно мой код: #include <iostream> using namespace std; int main() { setlocale (0,""); int n, i=0, a={0},sum=0 ,m=0; cout<<"Введите число n: "<<endl;
C++ Нод для двух натуральных чисел с циклом for http://www.cyberforum.ru/cpp-beginners/thread1130781.html
#include<iostream> #include<windows.h> using namespace std; int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); int a,b,j; cout<<"введите натуральное число ";cin>>a; if(a>0)
C++ ООП. Напечатать слова, отличные от последнего слова, предварительно преобразовав каждое из них по правилу Напечатать слова, отличные от последнего слова, предварительно преобразовав каждое из них по правилу: удалить из слова первую букву. Использовать функции. С помощью чего можно удалить букву из слова в строке? И как бы эту программу написать с классами и объектами используя функции? подробнее

Показать сообщение отдельно
mrKi
2 / 2 / 0
Регистрация: 01.08.2013
Сообщений: 60
26.03.2014, 23:06     В каких случаях вызывается конструктор копирования, и стоит ли вообще об этом думать?
В книге Г. Шилдта написано, что конструктор копирования может неявно вызываться, при инициализации объекта значением, которое возращает ф-я. Вот пример кода из книги. Вызов всех конструкторов/Деструкторов маркируется соотвествующими сообщениями. В книге результат(ниже приведенного кода) приводиться такой - 2 обычных конструктора + 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
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
#include <iostream>
 
using namespace std;
 
class myclass 
{
            int *p;
      public:
             myclass(int i);
             myclass(const myclass& ob);
             ~myclass();
             int getval() { return *p; }
};
 
myclass::myclass(int i)
{
                    cout<<"ÂûäåëåГ*ГЁГҐ ГЇГ*ìÿòè\n";
                    p=new int;
                    *p=i;
}
 
myclass::~myclass()
{
                   cout<<"ÎñâîáîæäåГ*ГЁГҐ ГЇГ*ìÿòè.\n";
                   delete p;
}
 
myclass::myclass(const myclass& obj)
{
                       p=new int;
                       *p=*obj.p;
                       cout<<"ÂûçâГ*Г* ГЄГ®Г*ñòðóêòîð êîïèðîâГ*Г*ГЁГї\n";
}
 
myclass f()
{
        myclass b(10);
        return b;
}
 
void display(myclass ob)
{
     cout<<ob.getval()<<endl;
}
 
int main()
{
    myclass copy(5);
    copy=f();        
    system("pause");
    return 0;
}
Суть вопроса: в каких же случаях вызывается конструктор копирования, и стоит ли вообще этим заморачиваться?
И почему при добавление вот такой строчки
C++
1
    cout<<copy.getval()<<endl;
выводиться на экран мусор, хотя из ф-и f() должна возвращаться копия локального объекта
Миниатюры
В каких случаях вызывается конструктор копирования, и стоит ли вообще об этом думать?  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru