Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Присваивание указателей, вызов оператора присваивания класса https://www.cyberforum.ru/cpp-beginners/thread806809.html
Если написать StrL **testStr; testStr = new StrL * ; testStr = new StrLBit("100001"); testStr = new StrLBit("0101"); testStr = testStr; bool t = 0; if (testStr == testStr) t = 1; printf...
C++ Передача объекта в метод
Объясните пожалуйста,как правильно написать. Есть метод AddMessage() который добавляет сообщение в тему,и есть метод GetMessage() который выводит сообщение на экран. Сам объект класса создаётся уже в...
Перегрузка функций C++
а) по номеру года выдает его название по старо японскому календарю. б) по названию месяца выдает знак Зодиака. Заранее спасибо за помощь.
C++ Работа с конструктором Всем доброго времени суток. Получил задание по программированию в универе. Писать задание за меня не прошу, нужно лишь уяснить парочку моментов. В общем-с, необходимо создать класс Person с одним... https://www.cyberforum.ru/cpp-beginners/thread806770.html
C++ Задача на тему "Строки" (вывести на экран только предложения, состоящие из заданного количества слов) https://www.cyberforum.ru/cpp-beginners/thread806759.html
написать программу, которая считывает текст из файла и вывыдит на экран только предложения состоящие из задоного количества слов int main(int argc, char *argv) { fstream fp; ...
C++ Ошибка в программе с использованием функций
#include <stdio.h>//подключение #include <conio.h>//необходимых #include <locale>//библиотек #include <time.h> void data_input(int *A); //Прототипы функций, в которые копируем предыдущий...
Массив, игра Крепс C++
«Крепс» Игрок бросает две кости. Каждая кость имеет шесть граней. Эти грани помечены как 1,2,3,4,5 и 6. После броска вычисляется сумма цифр двух верхних граней. Если сумма после первого броска...
C++ произведение 4-х чисел 1. произведение 4-х чисел 2. произведение 6-и чисел 3. объем конуса ету программу которая написана на паскале написать на С++ uses crt; label m; var n:char; a,b,c,d,e,f,h:integer; https://www.cyberforum.ru/cpp-beginners/thread806751.html
C++ Получить новый массив,который отличается от исходного тем, что все нечетные элементы удвоены https://www.cyberforum.ru/cpp-beginners/thread806749.html
нужно получить новый массив,который отличается от исходного тем, что все нечетные элементы удвоены. (-20;20)
C++ Вычислить B Вычислить B = f (m, x, y) + 0.6f ² (y, m, x) + f (x, y + m, ym), при m = 0.5, x = 3.3, y = 0.4, если f (x, y, z) = x + 2y + 3z ² Я думаю что можно сделать так, но не хватает знаний закончить,... https://www.cyberforum.ru/cpp-beginners/thread806747.html
silent_1991
Эксперт С++
5029 / 3089 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
Завершенные тесты: 1
25.03.2013, 14:21 0

Перегрузка оператора []

25.03.2013, 14:21. Просмотров 504. Ответов 8
Метки (Все метки)

Ответ

Starfalll, решается так:
Interval.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
#ifndef INTERVAL_H
#define INTERVAL_H
 
#include "BrokenInterval.h"
 
class Interval
{
public:
    Interval(double lower_bound, double upper_bound);
 
    double get_lower_bound() const;
    void set_lower_bound(double lower_bound);
 
    double get_upper_bound() const;
    void set_upper_bound(double upper_bound);
 
    BrokenInterval operator[](int parts_count) const;
 
private:
    double m_lower_bound;
    double m_upper_bound;
};
 
#endif  /* INTERVAL_H */
Interval.cpp
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
#include "Interval.h"
#include "BrokenInterval.h"
 
Interval::Interval(double lower_bound, double upper_bound):
    m_lower_bound(lower_bound),
    m_upper_bound(upper_bound)
{
}
 
double Interval::get_lower_bound() const
{
    return m_lower_bound;
}
 
void Interval::set_lower_bound(double lower_bound)
{
    m_lower_bound = lower_bound;
}
 
double Interval::get_upper_bound() const
{
    return m_upper_bound;
}
 
void Interval::set_upper_bound(double upper_bound)
{
    m_upper_bound = upper_bound;
}
 
BrokenInterval Interval::operator[](int parts_count) const
{
    return BrokenInterval(*this, parts_count);
}
BrokenInterval.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef BROKENINTERVAL_H
#define BROKENINTERVAL_H
 
class Interval;
 
class BrokenInterval
{
public:
    BrokenInterval(const Interval& interval, int parts_count);
 
    Interval operator[](int interval_index) const;
 
private:
    const Interval& m_interval;
          int       m_parts_count;
};
 
#endif  /* BROKENINTERVAL_H */
BrokenInterval.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "BrokenInterval.h"
#include "Interval.h"
 
BrokenInterval::BrokenInterval(const Interval& interval, int parts_count):
    m_interval(interval),
    m_parts_count(parts_count)
{
}
 
Interval BrokenInterval::operator[](int interval_index) const
{
    double lower_bound = m_interval.get_lower_bound();
    double upper_bound = m_interval.get_upper_bound();
 
    double interval_length = (upper_bound - lower_bound) / m_parts_count;
 
    double new_lower_bound = lower_bound + (interval_index - 1) * interval_length;
    double new_upper_bound = new_lower_bound + interval_length;
 
    return Interval(new_lower_bound, new_upper_bound);
}
main.cpp
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
#include <iostream>
 
#include "Interval.h"
 
int main()
{
 
    Interval interval(0.0, 10.0);
    Interval new_interval = interval[5][2];
 
    std::cout << "Interval: ("
              << interval.get_lower_bound()
              << ", "
              << interval.get_upper_bound()
              << ")"
              << std::endl;
 
    std::cout << "New interval: ("
              << new_interval.get_lower_bound()
              << ", "
              << new_interval.get_upper_bound()
              << ")"
              << std::endl;
 
    return 0;
}


Вернуться к обсуждению:
Перегрузка оператора []
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2013, 14:21

Перегрузка оператора []
Возможно ли создать два перегруженных оператора индексации, чтобы один из них возвращал l-value,...

Перегрузка оператора [][]
добрый день. имею в классе двумерный массив. подскажите как правильно сделать перегрузку к...

Перегрузка оператора +
Осуществляю перегрузку оператора +. и вот почему-то член класса s меняет свою длину с 4 до 7 и мне...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.