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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Чтение из файла. http://www.cyberforum.ru/cpp-beginners/thread24418.html
Здравствуйте. Учусь языку С++. Отказываюсь напрочь понимать как в оконном приложении осуществить чтение из файла с условием, что мне надо доставать только определенный текст, в моем случае комментарии из .htm. Их может быть не равно одному. Вывести на экран весь текст я могу, а вот как только кометнарии не понимаю. Что и как надо делать? Спасибо.
C++ Переписать main программы чтения текстовых строк Переписать main программы чтения текстовых строк и печати самой длиной из них так, чтобы она могла печатать самую длинную строку без каких либо ограничений на ее размер. http://www.cyberforum.ru/cpp-beginners/thread24400.html
Как создаются динамические структуры C++
Добрый вечер всем!!!:) Подскажите пожалуйста, как создаются динамические структуры. Если не сложно, объясните, как из этой вот структуры создать динамическую структуру!:) #include <stdio.h> #include <conio.h> #define num 5 struct Run_gear { char Ture; int Size_ture; }; struct AVTO {
Вычислить среднее арифметическое для всех наборов из 5 значений C++
Вычислить среднее арифметическое для всех наборов из 5 значений
C++ Нужна помощь! Как сделать Ожидание нажатие кнопок? http://www.cyberforum.ru/cpp-beginners/thread24353.html
Нужно написать программу на Си, которая при нажатии "стрелочки влево" начинает с задержкой в 0.5 секунд писать букву "D", а при нажатии "стрелочки вправо" - прекращает. Потом можно опять нажать "стрелочки влево" и "стрелочки вправо". И так далее до того как пользователь не нажмет ESC. Проблема первая: в том как сделать ожидание этой книпки таким образом, чтобы если кнопка не была нажата, то он...
C++ Составить программу, которая по введенному адресу клеточки определяет фигуру Белые шахматные фигуры стоят на клеточках: «А1» – Ладья «В1» - Конь «С1» - Офицер «D1» - Король «Е1» - Королева. Второй ряд занимают пешки. Все другие клеточки можно считать пустыми. Составить программу, которая по введенному адресу клеточки определяет фигуру, что ее занимает в начале партии (адрес можно вводить раздельно «буква и цифра»). Помогите пожалуста! Помогите пожалуста!%) подробнее

Показать сообщение отдельно
Викдон
 Аватар для Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
26.02.2009, 22:51     Конструктор копирования
вот есть класс:
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 дальше..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru