Форум программистов, компьютерный форум 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... подробнее

Показать сообщение отдельно
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;
    }
};
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru