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

Наследование и перегрузка операторов. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Реферат http://www.cyberforum.ru/cpp-beginners/thread166874.html
Получил задание, сделать Реферат по теме "Классы Конструкторы и Деструкторы в С++" Самого реферата я не нашёл, так что нужно сделать самому. Прошу посоветовать Книгу, откуда можно взять эту инфу, изложенную в доступной для понимания форме. Заранее спасибо
C++ В одномерном массиве, состоящем из N вещественных элементов, вычислить В одномерном массиве, состоящем из N вещественных элементов, вычислить: 1. максимальный по модулю элемент массива; 2. сумму элементов массива, расположенных между первым и вторым положительными элементами. Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных. http://www.cyberforum.ru/cpp-beginners/thread166869.html
В одномерном массиве , состоящем из N целых элементов , вычислить : C++
В одномерном массиве , состоящем из N целых элементов , вычислить : 1. минимальный по модулю элемент массива ; 2. сумму модулей элементов массива , расположенных после первого элемента , равного нулю. Преобразовать массив таким образом, чтобы в первой его половине располагались элементы , стоявшие в четных позициях, а во второй половине — элементы , стоявшие в...
C++ Не открывается файл
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; const int INITIAL_LIST_CAPACITY = 10; void build_wordlist (string* &word_list,int capacity, string filename) {
C++ Не получается переложить код с языка C# на язык С http://www.cyberforum.ru/cpp-beginners/thread166865.html
Подскажите пожалуйста, как переложить этот код на язык С using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program {
C++ Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX. Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX. F=ax^2+b*b*x при a < 0 и x неравно 0 F= x-(a/x-c) при a > 0 и x = 0 1+x/c в остальных случаях где a, b, c - действительные числа. подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
18.09.2010, 16:04     Наследование и перегрузка операторов.
Цитата Сообщение от GAME Посмотреть сообщение
Оператор вызывался корректно, только А оставалось без изменений....
Наверно потому, что объект в левой части выражения - это временный объект, созданный на основе объекта A?

Кстати, а какая необходимость была объявлять операторы дружественными?
Вот пример, как можно было бы сделать:
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
74
75
76
77
78
#include <iostream>
 
class base
{
 
public:
    
    base(int x)
        : _x(x) {}
        
    base(const base& rhs)
        : _x(rhs._x) {}
        
    virtual base operator + (const base& rhs)
    {
        base b(_x + rhs._x);
        return b;
    }
    
    virtual void show()
    {
        std::cout << _x << std::endl;
    }
    
protected:
    
    int _x;
};
 
class derived: public base
{
    
public:
    
    derived(int x, bool f)
        : base(x), _flag(f) {}
        
    derived(const derived& rhs)
        : base(rhs._x), _flag(rhs._flag) {}
        
    derived(const base& rhs)
        : base(rhs), _flag(DEFAULT_FLAG) {}
        
    void setFlag(bool f)
    {
        _flag = f;
    }
        
    operator base()
    {
        return base(_x);
    }
    
    derived operator + (const derived& rhs)
    {
        derived d = static_cast<base>(*this) + static_cast<base>(rhs);
        d.setFlag(_flag | rhs._flag);
        return d;
    }
    
    void show()
    {
        if(_flag)
            base::show();
    }
    
private:
 
    bool _flag;
    const static bool DEFAULT_FLAG = false;
};
 
int main()
{
    derived d1(3, false), d2(2, true), d3 = d1 + d2;
    d3.show();
    return 0;
}
PS. Переопределяемые методы хорошо бы делать виртуальными
 
Текущее время: 20:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru