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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MasterYo
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 39
#1

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

16.07.2013, 14:17. Просмотров 676. Ответов 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 минуты
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 14:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов (C++):

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

Перегрузка операторов - C++
Доброго времени суток! Столкнулся с такой проблемой, перегрузка операторов. Имею работающий код, но не смог сделать по своему заданию. ...

Перегрузка операторов - C++
В общем задание следующее: Создайте класс chess (шахматы), в котором хранятся поля шахматной доски x, y (целые числа, лежащие в диапазоне...

Перегрузка операторов - C++
Решите пожалуйсто задачу: Разработайте программу, в которой реализована перегрузка оператора «^». Оператор «^» должен возводить...

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

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
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
Модератор
Эксперт CЭксперт С++
13133 / 7396 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 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
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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,070
Записей в блоге: 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
1 / 1 / 0
Регистрация: 07.07.2013
Сообщений: 39
16.07.2013, 14:53  [ТС] #9
ну еще же половина силы мыши должна прибавиться к кошке

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

Добавлено через 2 минуты
ошибку выдает снова
Ilot
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,070
Записей в блоге: 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
Супер-модератор
Эксперт С++
5609 / 2643 / 244
Регистрация: 01.11.2011
Сообщений: 6,502
Завершенные тесты: 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
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 минуты
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2013, 23:06
Привет! Вот еще темы с ответами:

перегрузка операторов - C++
Всем привет. Дошел до темы перегрузки операторов и возникло два вопроса. Первый: Чем отличается вот этот код String ...

Перегрузка операторов - C++
В общем учу эту тему и ввожу код один в один как в уроке, но в уроке он компилится, а у меня нет. Ругается на &quot;c1++;&quot;, подскажите...

Перегрузка операторов - C++
Создайте класс Fraction (обыкновенная дробь), в котором реализовать перегрузку: оператора суммирования дробей, оператора суммирования дроби...

Перегрузка операторов ++ - C++
доброго времени суток. есть утечка памяти как я понимаю, но не мойму почему. о чем программа: есть обьект типа MString. В этом классе...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.07.2013, 23:06
Ответ Создать тему
Опции темы

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