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

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

Восстановить пароль Регистрация
 
MasterYo
 Аватар для MasterYo
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 39
16.07.2013, 14:17     Перегрузка операторов #1
Помогите с задачей на перегрузку операторов. (ппц мозговынос).

1)Создать class Mouse со свойством int power.

C++
1
2
3
4
5
6
7
8
 #include <iostream>
#include <conio.h>
using namespace std;
 
class Mouse
{
      public:
             int power;};
2)Создать class Cat со свойством int power.

C++
1
2
3
4
class Cat
{
      public:
             int power;};
3)Перегрузить в class Cat оператор += , который принимает указатель на мышь. Сила кошки увеличивается на половину силы мышки. Указатель на мышь удаляется. (кошка съедает мышь).

Помогите с 3 пунктом. Заранее спасибо.

Добавлено через 22 минуты
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 14:17     Перегрузка операторов
Посмотрите здесь:

Перегрузка операторов C++
Перегрузка операторов C++
C++ Перегрузка операторов с++
Перегрузка операторов C++
Перегрузка операторов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
16.07.2013, 14:21     Перегрузка операторов #2
C++
1
2
3
4
5
6
Cat& operator+=(const Mouse& m)
{
    (*this).power+=(*m).power;
    delete m;
    return *this;
}
MasterYo
 Аватар для MasterYo
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 39
16.07.2013, 14:30  [ТС]     Перегрузка операторов #3
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
C++
1
2
3
4
5
6
Cat& operator+=(const Mouse& m)
{
    (*this).power+=(*m).power;
    delete m;
    return *this;
}
ошибка выходит бро.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
16.07.2013, 14:34     Перегрузка операторов #4
Цитата Сообщение от MasterYo Посмотреть сообщение
ошибка выходит бро.
m - это ссылка на Mouse, а не указатель
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
16.07.2013, 14:37     Перегрузка операторов #5
А, ну да
C++
1
Cat& operator+=(Mouse* m)
MasterYo
 Аватар для MasterYo
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 39
16.07.2013, 14:44  [ТС]     Перегрузка операторов #6
в main так написать?

C++
1
2
3
4
5
6
7
8
9
int main()
{
    Cat Lucy;
    Mouse Tom;
    Lucy.power=15;
    Tom.power=8;
    cout<<Lucy.power+=Tom.power;
    getch();
}
Добавлено через 37 секунд
а не кстати половина power же должно быть

Добавлено через 53 секунды
Цитата Сообщение от MasterYo Посмотреть сообщение
Сила кошки увеличивается на половину силы мышки
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.07.2013, 14:46     Перегрузка операторов #7
ViktorKozlov, лучше так
C++
1
2
3
4
5
6
7
Cat& operator+=(const Mouse*& m)
{
    (*this).power+=(*m).power;
    delete m;
    m = NULL; // nullptr, if C++11
    return *this;
}
хотя это не правильно (смысле в задании косяк). Так не делается, если я выделяю память, то я же должен ее освободить, а не какой-то Cat в каком-то операторе. К тому же Mouse* может указывать на стек, а не heap, преподы не думают, что пишут.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
16.07.2013, 14:49     Перегрузка операторов #8
Цитата Сообщение от MasterYo Посмотреть сообщение
ошибка выходит бро.
Ну так функция принимает константный указатель:
C++
1
Cat& operator+=(const Mouse& m)
Может я и ошибаюсь, но в теле ф-и вы переменную переданную по константной ссылке не удалите. Попробуйте так:
C++
1
2
3
4
5
6
Cat& operator+= (mause* m)
{
    this->power += m->power/2;
    delete m;
    return *this;   
}
MasterYo
 Аватар для MasterYo
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 39
16.07.2013, 14:53  [ТС]     Перегрузка операторов #9
ну еще же половина силы мыши должна прибавиться к кошке

Добавлено через 40 секунд
Ilot, ок

Добавлено через 2 минуты
ошибку выдает снова
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
16.07.2013, 15:00     Перегрузка операторов #10
Ну так напишите какая ошибка. У меня мой код нормально компилируется:
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
#include<windows.h>
#include<iostream>
#include<conio.h>
using namespace std;
//***********************************************************************************//
class mause
{   
public:
    int power;
    mause(): power(4)
    {}
    ~mause()
    { cout << "Объект удален!\n"; }
};
class Cat
{
public:
    int power;
    Cat(): power(8)
    {}
    Cat& operator+= (mause* m)
    {
        this->power += m->power/2;
        delete m;
        return *this;   
    }
};
//***********************************************************************************//
int main() 
{
    mause *m1 = new mause;
    Cat c1;
 
    c1 += m1;
    cout << c1.power;
 
    getch();
    return 0;
}
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
16.07.2013, 15:03     Перегрузка операторов #11
C++
1
2
3
4
5
6
7
8
9
10
11
class Cat
  {
  public:
      int power;
      Cat& operator += (Mouse* m)
        {
        this->power += m->power/2; // this->power = this->power + m->power/2;
        delete m;
        return *this;
        };
  };
MasterYo
 Аватар для MasterYo
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 39
17.07.2013, 17:49  [ТС]     Перегрузка операторов #12
Новое задание: перегрузить +=, который принимает указатель на кошку. Возвращ-ся указатель на кошку победителя. Силы обеих кошек уменьшаются. (типа кошки дерутся, между собой, и в конце концов у обеих силы уменьшаются)

C++
1
2
3
4
Cat operator += (Cat* a, Cat* b)
{
  ..... //???
}
Добавлено через 22 минуты
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2013, 23:06     Перегрузка операторов
Еще ссылки по теме:

Перегрузка операторов +=, -=, *= C++
C++ Перегрузка операторов
C++ Перегрузка операторов

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

Или воспользуйтесь поиском по форуму:
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
17.07.2013, 23:06     Перегрузка операторов #13
C++
1
2
3
4
5
6
7
8
9
Cat *operator += (Cat* a, Cat* b)
{
  ..... //???
  
    if (a->power > b->power)
        return a;
    else
        return b;
}
Yandex
Объявления
17.07.2013, 23:06     Перегрузка операторов
Ответ Создать тему
Опции темы

Текущее время: 01:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru