Форум программистов, компьютерный форум, киберфорум
Наши страницы

Лабораторные по классам - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ немного усовершенствовать... http://www.cyberforum.ru/cpp-beginners/thread232379.html
B]как сделать так чтобы пробег автобусов генерировался randomize а не вводился с клавиатуры...?...все время получаются какие то ошибки:gsad: /* 5 20. В автопарке находится 10 автомобилей. ...
C++ Подскажите почему так? Я конечно новичок в с++, но чего-то это уже совсем.. Почему строка cout << 1/2; выводит "0" ? http://www.cyberforum.ru/cpp-beginners/thread232376.html
C++ Удаление n- го элемента из строки
напишите пожалуйста код, без использования ст. функциий. спасибо!
C++ Арифметические выражения на с++
Помогите записать и решить выражение. Одни ошибки и голова пухнет.%-) Вам вроде бы помощь нужна? Так постарайтесь облегчить задачу тем, кто в принципе мог бы помочь - напишите задание, код (если...
C++ Динамические структуры данных. Программа ввода в структуры и вывода информации из неё. http://www.cyberforum.ru/cpp-beginners/thread232298.html
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для каждого поезда указывается: □ номер поезда; □ станция...
C++ С++ и Stack overflow при записи в файл Есть функция, которая заполняет XML файлы и следующей упаковке их в *.odt(OpenOffice Writer) Так вот на 1700+ итерации StackOverflow... и не могу понять почему. Прошу совета, или хотя бы в какую... подробнее

Показать сообщение отдельно
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
24.01.2011, 13:45
Цитата Сообщение от Shnejder Посмотреть сообщение
Определить класс ограниченного массива чисел с плавающей точкой, индексы элементов которого могут принимать отрицательные значения. Нижний из этих индексов устанавливается по умолчанию равным 1. Перегрузить операции
• MDouble [int] – значение элемента с заданным номером;
• MDouble + double – прибавление целого числа к каждому элементу массива;
• MDouble*double – умножение всех элементов массива на целое число;
• MDouble = MDouble – операция присваивания.
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <algorithm>
#include <stdexcept>
 
#define CHECK_OUT_OF_RANGE 1
 
class DoubleArray
{
    private:
        int startIndex_;
        int size_;
        double* data_;
 
        void throwIsOutOfRange_(int i) const
        {
            if(i - startIndex_ < 0 || i - startIndex_ >= size_)
                throw std::out_of_range("Error: index out of range.");
        }
 
    public:
        explicit DoubleArray(int size, int startIndex = 1)
            : startIndex_(startIndex)
        {
            if(size <= 0) throw std::invalid_argument("Error: size <= 0.");
            size_ = size;
            data_ = new double[size_];
        }
 
        DoubleArray(const DoubleArray& rhs)
            : size_(rhs.size_)
        {
            data_ = new double[size_];
            std::copy(rhs.data_, rhs.data_+rhs.size_, data_);
        }
 
        ~DoubleArray()
        {
            delete[] data_;
        }
 
        double& operator[](int i)
        {
            #if CHECK_OUT_OF_RANGE
              throwIsOutOfRange_(i);
            #endif
 
            return data_[i - startIndex_];
        }
 
        const double& operator[](int i) const
        {
            #if CHECK_OUT_OF_RANGE
              throwIsOutOfRange_(i);
            #endif
 
            return data_[i - startIndex_];
        }
 
        DoubleArray& operator+=(int val)
        {
            std::transform(data_, data_+size_, data_,
                           std::bind2nd(std::plus<double>(), val));
            return *this;
        }
 
        DoubleArray& operator*=(int val)
        {
            std::transform(data_, data_+size_, data_,
                           std::bind2nd(std::multiplies<double>(), val));
            return *this;
        }
 
        const DoubleArray operator+(int val)
        {
            return DoubleArray(*this)+= val;
        }
 
        const DoubleArray operator*(int val)
        {
            return DoubleArray(*this)*= val;
        }
 
        DoubleArray& operator=(const DoubleArray& rhs)
        {
            if(&rhs != this)
            {
                if(size_ != rhs.size_)
                {
                    delete[] data_;
                    size_ = rhs.size_;
                    data_ = new double[size_];
                }
                std::copy(rhs.data_, rhs.data_+rhs.size_, data_);
            }
 
            return *this;
        }
 
        int size() const
        {
            return size_;
        }
 
        int startIndex() const
        {
            return startIndex_;
        }
 
        int endIndex() const
        {
            return size_ - 1 + startIndex_;
        }
};
 
// ...
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru