С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Слово из трех букв* Всем привет. Помагите найти ошибку в моем коде. Задано слово из трех букв. Слово состоит только из латинских букв, маленьких и больших. Вывести то же слово, где первая буква заглавная, остальные маленькие. Input DOG cat aRt biG Lip https://www.cyberforum.ru/ cpp-beginners/ thread2494726.html C++ Проблемы с swith - case
Добрый день, товарищи программисты! Нужен свежий взгляд со стороны, ибо у меня уже руки опускаются - а в чем ошибки понять не могу. Планировал в конце вывести вариант, который выбрал пользователь, однако приравнивание в кейсах не происходит. Также не суммируется sum1, sum2, sum3. Критика и советы приветствуются. Спасибо #include <iostream> using namespace std;
C++ Найти работу на C++ developer Друзья, уже около 9 месяцев по 12 часов в неделю изучаю C++. Знаю ООП, умею пользоваться всеми контейнерами STL, знаю алгоритмы STL, лямбда-выражения, функторы, некоторые паттерны, немного знаю UML. Так вот. Вопрос в том, что нужно знать хотя бы для уровня Junior C++ developer, что мне ещё надо учить? Слышал, что много где используют фреймвёрки Boost и Qt. Или же лучше учить что-то другое.... 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 Переменная меняется почему-то только у последнего элемента вектора. Как это исправить? #include <iostream> #include <vector>
C++ Не видит библиотеку <iostream> П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других файлов с их текстом. https://www.cyberforum.ru/ cpp-beginners/ thread2494630.html
C++ Написать функцию sum с переменным числом параметров, которая находит вещественную сумму Написать функцию sum с переменным числом параметров, которая находит вещественную сумму заданных обыкновенных дробей. Написать вызывающую функцию main, которая обращается к функции sum не менее трех раз с количеством параметров 6, 10, 12. Обыкновенная дробь задается двумя целыми числами. Что не так? double sum_drob(int num, ...) { va_list arg; va_start(arg, num); int sum1 = 0; 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 до n
C++ Как называется такой метод и что почитать чтобы это реализовать Скажите как называется такой метод работы и что почитать чтобы реализовать : 1) программа конектится на сервер , а сервер даёт информацию что показывать . Например : настраиваешь на сервере что-бы она показывала картинку или какую то форму для заполнения , а когда нажимаешь на софт на компе то там выскакивает окно с этими данными . Если кратко то хочу что бы на сервере я задавал форму или... https://www.cyberforum.ru/ cpp-beginners/ thread2494588.html C++ Исправить код с массивами https://www.cyberforum.ru/ cpp-beginners/ thread2494543.html
Если запускать через локальный отладчик WIndows то перестает выдавать числа после 4 строки, хотя я ждал, а если нажимать на F10 то все работает. Подскажите в чем проблема, пожалуйста. И если массив total увеличить до 96, d1 до 24 в цикле do,поставить в цикле for(int = 1; i<=20;i++) изменить на 96, то тоже зависает, и если через локальный отладчик тоже зависает и через в 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 << "Введите ключ элемента, перед которым нужно добавить новый элемент: "; cin >> n; cout << "Введите ключ нового элемента списка: "; cin >> k;
C++ Чтение и запись в двумерный массив огромных файлов https://www.cyberforum.ru/ cpp-beginners/ thread2494515.html
Если в кратце то есть очень большой файла в длину и ширину. Написал программку ,но когда слишком большое количество строк или их длина он тупо краештся. Вот мой код: long long strokeINT=0; char **code = new char* ; for (int i = 0; i < 15000; i++) { code = new char ;
9 / 7 / 2
Регистрация: 13.11.2014
Сообщений: 51
28.08.2019, 15:03 0

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

28.08.2019, 15:03. Показов 1327. Ответов 20
Метки (Все метки)

Ответ

Цитата Сообщение от dm_Consul Посмотреть сообщение
То есть он получается, скопировал весь объект, а указатель оставил на область в дин памяти, где str3 находится?
Да, примерно так.

Поясню немного, когда ты возвращаешь по значению, вот такой вариант:

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;
}
то происходит следующее - после выхода из оператора присваивания в памяти создается объект класса Str ( ты его не видишь по имени, он невидим, всё это есть в документации по c++). Создается он через конструктор копирования, а именно invisible(str3) (в случае, как в коде main(), invisible чисто мое название, для понимания). Если ты не определил свой конструктор копирования(КК), то будет вызван КК по умолчанию. Он просто тупо копирует поля одного объекта в другой. В твоем случае происходит копирование sPtr и length из str3 в тот самый "invisible" (который скрыт от глаз разработчика). В итоге получается, что в "invisible" продублированы все поля из str3 (в том числе и указатель). И так как данный оператор отработан (=), этот объект больше не нужен (документация c++) и он удаляется (странно звучит, но так оно работает). В деструкторе у тебя стоит "delete [] sptr". Объект invisible удаляет память по указателю, сдублированному с str3, поэтому в st3 останется мусор. При определении своего умного КК, ты вместо простого копирования выделяешь новую память для "invisible", и удаляешь ее, которая принадлежит только ему и точка.

Теперь про оптимизацию. Оба варианта работают

1) передача по ссылке
2) передача по значению, с определением конструктора

Но смотри что во втором случае: ты выделяешь память, никак ее не используешь, а затем удаляешь - простым языком, куча лишних действий. Да, с++ стандарт не заставляет тебя возвращать именно ссылку в операторе присваивания, но принято вообще именно так. Для закрепления понимания советую обратиться к книгам Страуструпа, возможно я где-то соврал и будет не лишним ещё раз понять механизм вызова конструкторов, описанную создателем языка.

Вернуться к обсуждению:
Классы и перегрузка операций C++
1
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2019, 15:03
Готовые ответы и решения:

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

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

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

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

20
28.08.2019, 15:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2019, 15:03
Помогаю со студенческими работами здесь

Перегрузка операций
#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
Copyright ©2000 - 2024, CyberForum.ru