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

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

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

Показать сообщение отдельно
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
31.10.2010, 08:58  [ТС]     оператор присваивания
Почему в коде ниже вызывается конструктор копирования, а не оператор присваивания
Вообще есть правило, что если идет присваивание к уже существуемому объекту, то должен вызываться оператор присваивания
пр
C++
1
2
Fraction f4
f4=f1+f2+f3
иначе
C++
1
Fraction f4 = f1+f2+F3
вызывается конструктор копирования
Теперь у меня возникает проблема, если следовать этом правилам, то почему у здесь
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
#include <stdafx.h>
#include <conio.h>
#include "Fraction.h"
using namespace std;
class FloatFraction : public Fraction {
public:
    FloatFraction(){
        set(0,1);
    }
    FloatFraction(int n, int d){
            set(n,d);
    }
    FloatFraction(int n){
        set(n,1);
    }
    FloatFraction(const Fraction& src){
        set(src.get_num(), src.get_den());
    }
    FloatFraction(const FloatFraction& src){
        set(src.get_num(), src.get_den());
    }
    double get_float() {
    return static_cast<double>(get_num())/get_den();
     }
};
int main() {
    FloatFraction f1(1,2),f2(1,3),f3;
    f3=f1+f2;
    cout << "Value of f3 is " << f3 << endl;
    cout << "Float value of f3 is " << f3.get_float() << endl;
    return 0;
}
вызывается не оператор присваивания, а конструктор копирования ?
Если нужен код Fraction.h вот он
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "stdafx.h"
#include "conio.h"
using namespace std;
class Fraction{
private:
    int num, den;
    void normalize(){
        if (den == 0 || num == 0) {
        num = 0;
        den = 1;
        }
    }
    int gcf(int a, int b){
        if (a % b == 0)
        return abs(b);
    else
        return gcf(b, a % b);
    }
    int lcm(int a, int b){
        return (a/gcf(a,b)*b);
    }
public:
    Fraction(){
        set(0, 1);
    }
    Fraction(int n, int d){
        set(n, d);
    }
    Fraction(int n){
        set(n,1);
    }
    Fraction(const Fraction& src){
        set(src.num,src.den);
    }
    void set(int n, int d){
        num = n; den = d; normalize();
    }
    int get_num() const{
        return num;
    }
    int get_den() const{
        return den;
    }
    Fraction add(const Fraction& other){
        Fraction fract;
    int lcd = lcm(den, other.den);
    int quot1 = lcd/den;
    int quot2 = lcd/other.den;
    fract.set(num * quot1 + other.num * quot2, lcd);
    fract.normalize();
    return fract;
    }
    Fraction mult(const Fraction& other){
        Fraction fract;
    fract.set(num * other.num, den * other.den);
    fract.normalize();
    return fract;
    }
    Fraction operator+(const Fraction& other){
        return add(other);
        }
    Fraction operator=(const Fraction& src){
        set(src.num, src.den);
        return *this;
    }
    Fraction operator*(const Fraction& other){
        return mult(other);
    }   
    friend ostream& operator << (ostream& os, Fraction& fr){
        os << fr.num << "/" << fr.den;
        return os;
    }
};
 
Текущее время: 17:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru