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

оператор присваивания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ матрица http://www.cyberforum.ru/cpp-beginners/thread175171.html
Дана целочисленная прямоугольная матрица.Определить: 1)Количество строк ,не содержащих ни одного нулевого элемента. 2) Максимальное из чисел, встречающихся в заданной матрице более одного раза
C++ На сколько квадратов можно разрезать данный прямоугольник? Даны натуральные числа a и b, которые определяют стороны прямоугольника. На сколько квадратов, стороны которых выражены также натуральными числами, можно разрезать данный прямоугольник, если от него каждый раз отрезать квадрат максимальной площади. Помогите пожалуйста решить. Решить нужно на языке С (попрошу, если это возможно писать пояснения к вашим действиям) http://www.cyberforum.ru/cpp-beginners/thread175162.html
последовательность из 10 случайных чисел C++
Написать программу которая генерирует последовательность из 10 случайных чисел, в диапозоне от 1 до 10. Выводит эти чисола на экран и вычисляет их среденее арифметическое. #include <iostream> #include <cstdlib> #include <ctime> using namespace std; void main() {
C++ определить положение точки как это сделать?
Дали задание и совсем не представляю как его делать, может кто нибудь подскажет или направит с чего начать... Вот задание:определить положение точки M(x,y) относительно заштрихованной фигуры
C++ Умножение матриц http://www.cyberforum.ru/cpp-beginners/thread175148.html
Вычислить: q = min(2*MA*MB) где MA, MB – матрицы размером N1xN2. Числа N1 и N2 задаются пользователем в начале работы программы. Все элементы матриц заполнить случайными целыми числами в диапазоне . Программу напишите пожалуйста как можно проще.
C++ поиск корня методом касательных Задача: найти корень уравнения, используя метод касательных. Точность e=0.0001 (в принципе она не нужна, так как я ввожу ее самостоятельно); x принадлежит промежутку (те a и b, тоже ввожу их самостоятельно). Вроде алгоритм правильный, но сумма - нуль и колоссальное число итераций n Код: // óòî÷íåíèå êîðíåé ìåòîäîì êàñàòåëüíûõ. #include <conio.h> #include <stdio.h> #include <cmath> using... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,411
31.10.2010, 13:15     оператор присваивания
Давай с последним примером разбираться, я щас над ним тоже парюсь, у меня вопросы похожие.
1) Почему вызывается не оператор присваивания

Ты наверное, имеешь ввиду этот код
C++
1
f1= f2+ f3
Ну я так понял, оператр присваивания нигде у тебя не определён, но тем не менее, он вызывается ВСЁ-ТАКИ, просто вызова мы не видим. Но тем не менее. У меня в книге написано по этому поводу:

"Функция оператора присваивания является специальной функцией, потому что компилятор сам её подставляет, если вы не делаете этого"

Ну вроде пока всё понятно должно быть. Уточняй если что не так.

2) К тому же конструктор копирования действительно вызывается. Ты имеешь ввиду этот?
C++
1
2
3
FloatFraction(const FloatFraction& src){
        set(src.get_num(), src.get_den());
    }
Ну, а почему бы ему не вызываться? ЕСли ты имеешь ввиду тот же самый код, то н приодится к такому виду:

C++
1
f1= f2.add(f3)
Теперь смотрим, что написано в книге:
ситуации, когда вызывается конструктор копирования АВТОМАТИЧЕСКИ, то есть ты не прописываешь его вызов, а н вызывается
1) Когда возвращаемое значение имеет тип класса

и так далее

В даном случае add возвращает переменную типа Fraction, поэтому конструктор копирования всё-таки вызывается (и должен вызываться), хоть мы этого и не видим (автоматически то есть)

Ну как-то так. Коряво.

Добавлено через 3 минуты
А, не я соврал чуток. Ты же не пишешь какой именно код ты имеешь ввиду приходится додумывать самому
Итак. f3= f1+ f2

При возвращении add значения вызывается (наверное) вот это конструктор копирования:
C++
1
2
3
FloatFraction(const Fraction& src){
        set(src.get_num(), src.get_den());
    }
А не тот, о котором я писал вначале

Добавлено через 2 часа 29 минут
Но что действительно удивляет, так это почему не вызывается это конструктор копирования
C++
1
2
3
    FloatFraction(const FloatFraction& src){
        set(src.get_num(), src.get_den());
    }
В этом выражении
C++
1
f3 = f1 + f2;
Оно ведь приводится к виду:
C++
1
   f3 = f1.add(f2);
Должен выщзываться констуктор копированя! Вот в книге написано:
"Конструктор копирования вызывается, когда аргумент имеет тип класса"

Это и есть тот случай
Аргумент тут f2, он имеетр тип FloatFraction, а, посколку add с таким классом работать не может,
его надо привести к типу Fraction

Вот и должен автоматом вышеупомянутый конструктор вызываться. Так не вызывается! Пишем так:

C++
1
2
3
4
    FloatFraction(const FloatFraction &src) {
     printf ("ttttttttttttttt\n");
     set(src.get_num(), src.get_den());
    }
Компилим, запускаем код на исплнение и ждём появления троки "ttttttttttttttttt\n". ТАк ведь нет её
В чём дело, друзья?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru