Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 39
1

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

16.07.2013, 14:17. Просмотров 779. Ответов 12
Метки нет (Все метки)

Помогите с задачей на перегрузку операторов. (ппц мозговынос).

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 минуты
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2013, 14:17
Ответы с готовыми решениями:

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в...

Перегрузка операторов
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; class matrix { protected: int **mass; int n;...

Перегрузка операторов
Нужно для класса комплексных чисел перегрузить операторы. Односимвольные определить как...

Перегрузка операторов
Осуществите перегрузку оператора “+=” так, чтобы при его использовании сумма увеличивалась на 5....

12
136 / 128 / 59
Регистрация: 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;
}
1
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;
}
ошибка выходит бро.
0
Грамотный. Безпорно.
16855 / 9750 / 1880
Регистрация: 27.09.2012
Сообщений: 24,161
Записей в блоге: 2
16.07.2013, 14:34 4
Цитата Сообщение от MasterYo Посмотреть сообщение
ошибка выходит бро.
m - это ссылка на Mouse, а не указатель
1
136 / 128 / 59
Регистрация: 13.12.2012
Сообщений: 293
16.07.2013, 14:37 5
А, ну да
C++
1
Cat& operator+=(Mouse* m)
0
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 Посмотреть сообщение
Сила кошки увеличивается на половину силы мышки
0
Jesus loves me
Эксперт С++
5106 / 3119 / 352
Регистрация: 12.12.2009
Сообщений: 7,890
Записей в блоге: 2
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, преподы не думают, что пишут.
0
Эксперт С++
1884 / 1232 / 354
Регистрация: 16.05.2013
Сообщений: 3,231
Записей в блоге: 6
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;   
}
0
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 39
16.07.2013, 14:53  [ТС] 9
ну еще же половина силы мыши должна прибавиться к кошке

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

Добавлено через 2 минуты
ошибку выдает снова
0
Эксперт С++
1884 / 1232 / 354
Регистрация: 16.05.2013
Сообщений: 3,231
Записей в блоге: 6
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;
}
1
Почетный модератор
Эксперт С++
5836 / 2843 / 390
Регистрация: 01.11.2011
Сообщений: 6,881
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;
        };
  };
0
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 минуты
0
55 / 55 / 6
Регистрация: 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;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2013, 23:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перегрузка операторов
Есть класс массив, у него есть перегрузка операторов ввода, вывода. Со стандартными типами данных...

[c++] Перегрузка операторов
Не работает. #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #pragma argsused struct FazzyNumber {...

перегрузка операторов
Это часть хедера(весь большеват) #include &lt;iostream&gt; #include &lt;cstdio&gt; using namespace std;...

Перегрузка операторов
Приветствую. Вот как выглядит задание: АТД − множество с элементами типа char. Дополнительно...


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

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

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