0 / 0 / 0
Регистрация: 23.04.2013
Сообщений: 3

Перегрузка оператора ++

23.04.2013, 16:52. Показов 574. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать операторы префиксного и постфиксного инкремента для приращения переменной itsRadius класса SimpleCircle. Переменная itsRadius должна размещаться в динамической памяти.

Вот моя попытка реализовать, но там ерунда получается :
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
#include <iostream>
 
class SimpleCircle
{
public:
    SimpleCircle();
    SimpleCircle(int radius);
    ~SimpleCircle() {}
    int GetRadius() {return *itsRadius;}
    void SetRadius(int radius) { *itsRadius = radius;}
    const SimpleCircle & operator++ ();
    const SimpleCircle operator++ (int);
 
private:
    int *itsRadius;
};
 
SimpleCircle::SimpleCircle()
{
    itsRadius = new int (5);
}
 
SimpleCircle::SimpleCircle(int radius)
{
    itsRadius = new int (radius);
}
 
const SimpleCircle & SimpleCircle::operator++()
{
    ++(itsRadius);
    return *this;
}
 
const SimpleCircle SimpleCircle::operator++(int)
{   
    SimpleCircle temp(*this);
    ++(itsRadius);
    return temp;
}
 
 
int main()
{
    using namespace std;
    SimpleCircle Round;
    SimpleCircle Round_2(1);
    SimpleCircle Round_3(2);
 
    cout << Round.GetRadius() << endl;
    cout << Round_2.GetRadius() << endl;
    cout << Round_3.GetRadius() << endl;
    
    Round_2 = ++Round;
    Round_3 = ++Round;
 
    cout << Round.GetRadius() << endl;
    cout << Round_2.GetRadius() << endl;
    cout << Round_3.GetRadius() << endl;
    
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.04.2013, 16:52
Ответы с готовыми решениями:

Перегрузка оператора =
Допустим я имею две перегрузки: Zakaz&amp; operator=(Zakaz&amp;); Zakaz operator=(Zakaz); Когда какая из них системой будет...

Перегрузка оператора =
Ввести строку символов S1. Программа должна содержать перегруженную операцию “=”, использование которой скопирует S1 в S2 при следующих...

перегрузка оператора +
Не могу понять: в 184 строке отказывается работать. Без нее - все нормально. Скорее всего неправильно переопределил +.... Но если...

3
 Аватар для lemegeton
4902 / 2695 / 920
Регистрация: 29.11.2010
Сообщений: 5,783
23.04.2013, 17:25
С какой целью свойство радиус сделано указателем? Если бесцельно, то проще без него:
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
#include <iostream>
 
class SimpleCircle {
 public:
  SimpleCircle() : radius(0) {}
  SimpleCircle(int radius) : radius(radius) {}
  int getRadius() const { return radius; }
  void setRadius(int radius) { this->radius = radius; }
 private:
  int radius;
};
 
// префиксный инкремент
SimpleCircle &operator++(SimpleCircle &circle) {
  circle.setRadius(circle.getRadius() + 1);
  return circle;
}
 
// постфиксный инкремент
SimpleCircle operator++(SimpleCircle &circle, int) {
  SimpleCircle result = circle;
  circle.setRadius(circle.getRadius() + 1);
  return result;
}
 
std::ostream &operator<<(std::ostream &stream, const SimpleCircle &circle) {
  return stream << "Circle{radius=" << circle.getRadius() << "}";
}
 
int main(int argc, char **argv) {
  SimpleCircle a = 10;
  
  std::cout << a++ << std::endl; // 10
  std::cout << a << std::endl;   // 11
  std::cout << ++a << std::endl; // 12
  
  return 0;
}
0
0 / 0 / 0
Регистрация: 23.04.2013
Сообщений: 3
23.04.2013, 17:28  [ТС]
Я понимаю, что проще, и знаю как сделать, но в задании сказано : "Переменная itsRadius должна размещаться в динамической памяти." Вот такая беда =/
0
 Аватар для lemegeton
4902 / 2695 / 920
Регистрация: 29.11.2010
Сообщений: 5,783
23.04.2013, 17:30
Если вам указатель дорог как память, то нужно добавить конструктор копирования и оператор присваивания.
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
#include <iostream>
 
class SimpleCircle {
 public:
  SimpleCircle() : radius(new int()) {}
  SimpleCircle(int radius) : radius(new int(radius)) {}
  SimpleCircle(const SimpleCircle &other)
    : radius(new int(other.getRadius())) {}
  SimpleCircle &operator=(const SimpleCircle &other) {
    if (this != &other) {
      setRadius(other.getRadius());
    }
    return *this;
  }
  virtual ~SimpleCircle() {
    delete radius;
  }
  int getRadius() const { return *radius; }
  void setRadius(int radius) { *(this->radius) = radius; }
 private:
  int *radius;
};
 
// префиксный инкремент
SimpleCircle &operator++(SimpleCircle &circle) {
  circle.setRadius(circle.getRadius() + 1);
  return circle;
}
 
// постфиксный инкремент
SimpleCircle operator++(SimpleCircle &circle, int) {
  SimpleCircle result = circle;
  circle.setRadius(circle.getRadius() + 1);
  return result;
}
 
std::ostream &operator<<(std::ostream &stream, const SimpleCircle &circle) {
  return stream << "Circle{radius=" << circle.getRadius() << "}";
}
 
int main(int argc, char **argv) {
  SimpleCircle a = 10;
  
  std::cout << a++ << std::endl; // 10
  std::cout << a << std::endl;   // 11
  std::cout << ++a << std::endl; // 12
  
  return 0;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2013, 17:30
Помогаю со студенческими работами здесь

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

Перегрузка оператора ==
Я уже встречала подобный вопрос на этом форуме, но у меня всё равно что-то не получается Вот виртуальная ф-ция, которую я вызываю в...

Перегрузка оператора []
Создал класс в котором массив указателей на другой класс, перегрузил оператор взятия индекса следующим образом: h-файл #ifndef...

Перегрузка оператора -
В своём классе я перегрузил оператор -,но в функции,использующей вычитание возникает ошибка error C2678: бинарный &quot;-&quot;: не...

Перегрузка оператора +=
реализую класс собственных строк называеться MyString вылетает при использовании оператора += самое интересное что если дебажишь код по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru