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

Что такое конструктор копий? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Функция для удаления слова из строки http://www.cyberforum.ru/cpp-beginners/thread661777.html
Доброго времени суток, господа! Столкнулся с проблемой написания функции для удаления слова из строки. До этого приходилось удалять лишь лишние пробелы, делал это следующим образом for(i=0;i<strlen(str);i++) if((str==' ')&&(str==' ')){ delchar(str,i+1); i-- ; } , где delchar
C++ Написать обработчик для класса Vector, который будет ловить следующие ошибки: Дано задание: Написать обработчик для класса Vector, который будет ловить следующие ошибки: 1. невозможность выделения памяти, причем выводилась информация именно в том методе, в котором не удалось выделить память; 2. выход за рамки границы вектора, причем, выводилась информация именно в том методе, в котором делались попытки выхода за рамки массива; 3. неверный размер массива. ... http://www.cyberforum.ru/cpp-beginners/thread661776.html
Двумерный массив. Найти наименьший элемент матрицы. Напечатать его индексы C++
Найти наименьший элемент матрицы. Напечатать его индексы. Добавлено через 40 секунд помогите пожалуйста
Классы. Объекты. Методы C++
Доброго времени суток! Вот задачка. Я пока начинающий в этом деле, так что не очень понятно... Создать класс "дата". Данные класса должны быть представлены тремя полями: числом, месяцем и годом XXI века. Класс должен содержать конструктор по умолчанию, конструктор, инициализирующий поля класса заданными значениями. Обязательными яв-ся методы, возвращающие значения полей, изменяющие эти...
C++ Поменять местами элементы матрицы http://www.cyberforum.ru/cpp-beginners/thread661759.html
Работа с квадратными массивами В задаче рассматривается двумерный массив с одинаковым количеством строк и столбцов; такой массив называют квадратным. Задача: В квадратном массиве из n строк, где n – нечетное число, все элементы различны. Наибольший элемент среди стоящих на главной и побочной диагоналях поменять местами с элементом, стоящим на пересечении этих диагоналей.
C++ Прошу сказать, правильно ли я решил, и , если не правильно, то указать ошибки Есть задачка \sum_{i=0}^{8}\sum_{j=0}^{10}\sum_{k=0}^{3}\left(\frac{i+3k-4j}{2+3i+4j} \right) и есть мой код (сразу говорю, я очень плох в программировании:) )- #include<iostream> using namespace std; void main( ) { float sum=0 ; подробнее

Показать сообщение отдельно
Sher_vud
4 / 4 / 1
Регистрация: 25.09.2012
Сообщений: 42
02.10.2012, 00:53     Что такое конструктор копий?
тоже столкнулся с проблемой запуска конструктора копирования, изучая пример из учебника. листинг следующий:
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
77
#include <cstring>
using namespace std;
////////////////////////////////////////////////////////////////////////////////
class strCount
{
      private:
              int count;
              char *str;
              friend class String;
      public:
             strCount(char *s)
             {
                           int length = strlen(s);
                           str = new char [length+1];
                           strcpy(str, s);
                           count = 1;
                           }
             ~strCount()
             { delete [] str; }
};
////////////////////////////////////////////////////////////////////////////////
class String
{
      private:
              strCount *ptr;
      public:
             String()
             {
                     ptr = new strCount("NULL");
                     }
             String(char *t)
             {
                     ptr = new strCount(t);
                     }
             String(const String &T)    //если не проставить "const" компилятор выдает ошибку
             {                                              // при этом в исходном примере const  не стоит 
                     cout << "\nkopirovanie\n";
                     ptr = T.ptr;
                     (ptr -> count)++;
                     }
             ~String()
             {
                      if(ptr->count == 1)
                      delete ptr;
                      else
                      (ptr->count)--;
                      }
             void display()
             {
                  cout << endl << ptr->str;
                  cout << " addr " << ptr;
                  }
             String& operator = (String& T)
             {
                     cout << "\nprisvaivanie\n";
                     if(ptr->count==1)
                     delete ptr;
                     else
                     (ptr->count)--;
                     ptr = T.ptr;
                     (ptr->count)++;
                     return *this;
                     }
};
////////////////////////////////////////////////////////////////////////////////
int main()
{
    String ss1 = "test test";
    String ss2, ss3;
    ss3 = ss2 = ss1;
    ss1.display();
    ss2.display();
    ss3.display();
    cout << endl;
    system("pause");
    return 0;
}
при запуске так же не появляется сообщения, за которое отвечает строчка:
cout << "\nkopirovanie\n";
и становится теперь совсем не понятно, запускается ли мой конструктор копирования или конструктор копирования по умолчанию
если кто знает подскажите пожалуста

хмм похоже все таки в данном случае конструктор копирования по умолчанию
добавил сейчас объект ss4 и проинициализировал его значением ss1, после чего вывел. появилось сообщение запуска моего конструктора копирования:
что добавил:
C++
1
2
String ss4 = ss1;
ss4.display();
я в сметении, почему же происходит именно так??
 
Текущее время: 06:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru