Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Слово из трех букв* Всем привет. Помагите найти ошибку в моем коде. Задано слово из трех букв. Слово состоит только из латинских букв, маленьких и больших. Вывести то же слово, где первая буква заглавная, остальные... https://www.cyberforum.ru/ cpp-beginners/ thread2494726.html C++ Проблемы с swith - case
Добрый день, товарищи программисты! Нужен свежий взгляд со стороны, ибо у меня уже руки опускаются - а в чем ошибки понять не могу. Планировал в конце вывести вариант, который выбрал пользователь,...
C++ Найти работу на C++ developer Друзья, уже около 9 месяцев по 12 часов в неделю изучаю C++. Знаю ООП, умею пользоваться всеми контейнерами STL, знаю алгоритмы STL, лямбда-выражения, функторы, некоторые паттерны, немного знаю UML.... https://www.cyberforum.ru/ cpp-beginners/ thread2494660.html C++ Исправить код с массивами снова https://www.cyberforum.ru/ cpp-beginners/ thread2494651.html
#include "pch.h" #include <iostream> #include <string.h> using namespace std; int main() { int a, b, c, d, e, f, i, ac, r1; int r2 = 0; int u = 0; int t = 0;
C++ Не меняются значения элементов вектора через указатели
Вот учусь программировать. Дошел до всяких там указателей. Программа выводит два числа: -858993460 2 Переменная меняется почему-то только у последнего элемента вектора. Как это исправить? ...
C++ Не видит библиотеку <iostream> П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других файлов с их текстом. https://www.cyberforum.ru/ cpp-beginners/ thread2494630.html
C++ Написать функцию sum с переменным числом параметров, которая находит вещественную сумму Написать функцию sum с переменным числом параметров, которая находит вещественную сумму заданных обыкновенных дробей. Написать вызывающую функцию main, которая обращается к функции sum не менее трех... https://www.cyberforum.ru/ cpp-beginners/ thread2494618.html Чему будет равно значение переменной q после выполнения алгоритма C++
Чему будет равно значение переменной q после выполнения алгоритма при n=10, X={3;3;9;1;2;2;10;9;5;7}? Алгоритм Задать 10 Для i=1 до n Задать Х Для i=1 до 10 M:=0 q:=0 Для i=1...
C++ Как называется такой метод и что почитать чтобы это реализовать Скажите как называется такой метод работы и что почитать чтобы реализовать : 1) программа конектится на сервер , а сервер даёт информацию что показывать . Например : настраиваешь на сервере что-бы... https://www.cyberforum.ru/ cpp-beginners/ thread2494588.html C++ Исправить код с массивами https://www.cyberforum.ru/ cpp-beginners/ thread2494543.html
Если запускать через локальный отладчик WIndows то перестает выдавать числа после 4 строки, хотя я ждал, а если нажимать на F10 то все работает. Подскажите в чем проблема, пожалуйста. И если массив...
Идентификатор List не определён C++
#include <list> #include<iostream> #include<stdio.h> #include<conio.h> using namespace std; List* add_list(List* first); { int n, k; cout << "Введите ключ элемента, перед которым нужно...
C++ Чтение и запись в двумерный массив огромных файлов https://www.cyberforum.ru/ cpp-beginners/ thread2494515.html
Если в кратце то есть очень большой файла в длину и ширину. Написал программку ,но когда слишком большое количество строк или их длина он тупо краештся. Вот мой код: long long...
0 / 0 / 0
Регистрация: 15.05.2019
Сообщений: 66
0

Классы и перегрузка операций - C++ - Ответ 13794225

28.08.2019, 11:40. Показов 1018. Ответов 20
Метки (Все метки)

Добрый день.
Изучаю в данный момент классы и перегрузку операций.
Столкнулся с парой непонятных вещей, подскажите пожалуйста.

1)У Дейтлов в книге есть пример ими созданного класса Array, для работы с массивами целочисленных значений.
Там есть перегруженная элемент-функция(метод) присваивания одного объекта класса другому(например integer1=integer2):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const Array &Array::operator=(const Array &right)
{
   if (&right!=this) //избегать самоприсваивания
   {
      if (size!=right.size)
      {
         delete [] ptr;
         size = right.size;
         ptr=new int[size];
      }
      
      for (int i=0;i<size;i++)
      {
         prt[i]=right.ptr[i];
      }
      
      return *this;
   }
}
И ниже есть описание этой функции, где указано, цитирую:

"Если бы проверка на самоприсваивание не производилась, то при самоприсваивании функция operator= перед своим завершением удаляла бы динамическую память, ассоциированную с объектом." В результате ptr указывал бы на память, которая была удалена."

Но ведь при самоприсваивании, в вышеуказанной функции нигде не выделяется дин. память. Она же вроде выделяется, только если объекты разного размера, а в случае самоприсваивания размер одинаковый. Какая по их словам память удаляется при самоприсваивании, в данной функции(если бы не было проверки на самоприсваивание конечно)?


2)И второй вопрос:
Есть у меня в классе Str(мною сделанном) функция присваивания одного объекта Str другому:

C++
1
2
3
4
5
6
7
8
9
const Str &Str::operator=(const Str &right)
{
   delete [] sPtr;
   length=right.length;
   sPtr=new char[length+1];
   strcpy(sPtr,right.sPtr);
 
   return *this;
}
Я к примеру присваиваю один объект другому: string2=srting1;

Если я использую вышеуказанную функцию, как написано, всё нормально присваивается.
Но если я пытаюсь сделать возврат из функции не по ссылке а по значению, в string2 хранится мусор.
Помогает только использование Конструктора копирования.

C++
1
2
3
4
5
6
Str::Str(const Str &copys)
{
   length=copys.length;
   sPtr=new char[length+1];
   strcpy(sPtr,copys.sPtr);
}
Объясните пожалуйста, почему в в случае передачи по значению и без использования Конструктора копирования, в
string2 лежит мусор? Ведь все действия по записи в него string1 были произведены в функции. Как на него возврат данных влияет?

Вернуться к обсуждению:
Классы и перегрузка операций C++
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2019, 11:40
Готовые ответы и решения:

Классы. Перегрузка операций. С++
Разработайте программу на языке С++, используя пользовательский тип данных – классы и перегрузку...

Классы перегрузка операций
Доброго времени суток. Помогите разобраться, что я не так пишу? По задаче мне нужно перегрузить...

Перегрузка операций << и >>
Всем добрый день.. У меня такая проблема, не получается перегрузить операторы &lt;&lt; и &gt;&gt; для своего...

Перегрузка операций
C++ ругается когда я пытаюсь сделать след-ю перегрузку операций. У меня трехмерный массив matrix и...

20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2019, 11:40

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Перегрузка операций
#include &lt;iostream&gt; using namespace std; class chislo { public: chislo(); chislo(int...

Перегрузка операций << и >>
Помогите пожалуйста перегрузить &gt;&gt; и &lt;&lt; #include &lt;fstream&gt; #include &lt;iostream&gt; #include...

Перегрузка операций
Разработайте программу на языке С++, используя пользовательский тип данных – классы и перегрузку...

Перегрузка операций
Всем привет, нужно помощь, я самостоятельно изучаю программирование, наткнулся на лабораторную в...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.