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

Конструктор копирования - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Чтение из файла. http://www.cyberforum.ru/cpp-beginners/thread24418.html
Здравствуйте. Учусь языку С++. Отказываюсь напрочь понимать как в оконном приложении осуществить чтение из файла с условием, что мне надо доставать только определенный текст, в моем случае...
C++ Надо задать класс с машинами, чтобы на печать выводилось модель, скорость Завтра здавать лабу по информатике, а она не идёт помогите плиз. Что я не так делаю? Надо задать класс с машинами, чтобы на печать выводилось модель, скорость(если v<0,то ошибка),номер.Помогите!!!!!... http://www.cyberforum.ru/cpp-beginners/thread24410.html
C++ Переписать main программы чтения текстовых строк
Переписать main программы чтения текстовых строк и печати самой длиной из них так, чтобы она могла печатать самую длинную строку без каких либо ограничений на ее размер.
Как создаются динамические структуры C++
Добрый вечер всем!!!:) Подскажите пожалуйста, как создаются динамические структуры. Если не сложно, объясните, как из этой вот структуры создать динамическую структуру!:) #include <stdio.h>...
C++ Вычислить среднее арифметическое для всех наборов из 5 значений http://www.cyberforum.ru/cpp-beginners/thread24361.html
Вычислить среднее арифметическое для всех наборов из 5 значений
C++ Нужна помощь! Как сделать Ожидание нажатие кнопок? Нужно написать программу на Си, которая при нажатии "стрелочки влево" начинает с задержкой в 0.5 секунд писать букву "D", а при нажатии "стрелочки вправо" - прекращает. Потом можно опять нажать... подробнее

Показать сообщение отдельно
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226

Конструктор копирования - C++

26.02.2009, 22:51. Просмотров 15330. Ответов 19
Метки (Все метки)

вот есть класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Mnojestvo{   //Класс Множество
 public:
     Mnojestvo(Mnojestvo & rN); //Конструктор копирования
     Mnojestvo(int n){FMas=new char [n];} //Конструктор для итогого множества С
     Mnojestvo(int n,char*ptr); 
     ~Mnojestvo(){delete [] FMas;};
     Mnojestvo Union(Mnojestvo &P) const; //Метод "Объединение"
     Mnojestvo Cross(Mnojestvo &P) const;// Метод "Пересечение"
     void Insert_Elem(char elem) ; //Метод "Добавление элемента
     void View_Set(); //Получение значения множества
     Mnojestvo operator + (Mnojestvo &P); //Пререгрузка операции "+"
     Mnojestvo operator - (Mnojestvo &P); //Перегрузка операции "-"
     int Proverka(char elem); //Проверка элемента на вхождение в множество
     void operator =(Mnojestvo &T);
   // методы
 private:
    char*FMas; //Указатель на массив символов
    int count; //Число элементов в множестве
};
вот конструктор копирования:
C++
1
2
3
4
5
6
7
//Конструктор копирования
Mnojestvo::Mnojestvo(Mnojestvo &rN){
    FMas= new char [rN.count];
    count=rN.count;
    for(int i=0;i<rN.count;i++)
        FMas[i]=rN.FMas[i];
}
Суть задачи объявить два объекта представляющих из себя два множества.

вот я делал операцию объединения этих множеств так:

С=А+B;

C++
1
2
3
4
5
// Перегрузка операции "+"
 Mnojestvo Mnojestvo::operator +(Mnojestvo &rB){
    
return Union(rB);                      //Почему не создается копия копии объекта Time?
 }
сам метод Union:
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
 //Метод Union
 Mnojestvo Mnojestvo::Union(Mnojestvo &P) const{ 
     
     char UnionMas [20]; //Массив "объединения"
     char elem;
     int counter=count;
     bool flag;
      
       for(int i=0;i<count;i++){   //Заполняем массив объединения множеством текущего объекта
          UnionMas[i]=FMas[i];
       }
 
      // Заносив в массив "Объединения" только те элементы мн-ва входного объекта которых нет в массиве "объединение"
       for(int j=0;j<P.count;j++){  //Проходим по множеству входного объекта
         elem=P.FMas[j];
         flag=false;
          for(int k=0;k<count;k++){  //Бегаем по this множеству
              if (elem==FMas[k])
                  flag=true;
          }
        if (flag==false){
            UnionMas[counter]=elem;
            counter++;
        }
       
      }//for
  
       Mnojestvo Time(counter,UnionMas); //Создаем Временный объект
       
       
 
    return Time ; 
 }
В методе Union создается временный объект Time и в строке метода Union "return Time" создается копия объекта Time (назовем скажем kTime), а сам Time удаляется.
В перегрузку операции "+" возвращается kTime.
Вот вопрос! когда kTime попадает в operator +() она же вызодит из области видимости? и по идее в строке метода operator + "return Union(rB)" должен вызваться конструктор копирования т.е. создать копию kTime, скажем kkTime, а сам kTime удалить? Но этого не происходит! Просто передается kTime дальше..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.