Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2014, 19:48   #1
sinobithug
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 63
По умолчанию Не явная перегрузка оператора

День добрый.
Код:
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

class complex
 {
   public:
     complex();   //конструктор
     ~complex () {}    //деструктор
     int GetltsVal() const { return itsVal; }
     void SetltsVal(int x) { itsVal = x; }
     void Increment() { ++itsVal; }

        int GetltsVall() const { return itsVall; }
     void SetltsVall(int x) { itsVall = x; }
     void Incrementl() { ++itsVall; }


    void operator++ () { ++itsVal,++itsVall; } // вот тут и идёт перегрузка

   private:
     int itsVal;
     int itsVall;
 } ;

complex::complex():
 itsVal(0)
  {}

   itsVall(int)
    {}


int main(int argc, char* argv[])
{

complex i,i1;
    cout << "Nachalnoe I= " << i.GetltsVal() << endl;  // начальное i=0
     i.operator ++();

      cout << "Nachalnoe I= " << i.GetltsVall() << endl;  // начальное i=0
     i1.operator ++();


    cout << "I uvelichili na odin I= " << i.GetltsVal() << endl;  // инкремент  ++ увеличивает iна еденицу
     ++i;
      cout << "I uvelichili na odin I= " << i1.GetltsVall() << endl;  // инкремент  ++ увеличивает iна еденицу
     ++i1;


       cout << "echo raz I uvelichili na odin I= " << i.GetltsVal() << endl;   // инкремент  ++ увеличивает  i ещёна еденицу

        cout << "echo raz I uvelichili na odin I= " << i1.GetltsVall() << endl;   // инкремент  ++ увеличивает  i ещёна еденицу
     system("pause");
     return 0;
     
}

Нужно перегрузить инкремент ++ . Преподаватель сказал что он у меня перегружен явно. А надо не явно. Как это сделать?
sinobithug вне форума Ответить с цитированием
Старый 19.06.2014, 20:04   #2
casekey
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 95
По умолчанию

наверное он подразумевал не перегрузку, а то, что в коде явный вызов операторов
Код:
i.operator ++();
хотя можно так
Код:
i++;
casekey вне форума Ответить с цитированием
Старый 19.06.2014, 22:48   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

можно перегрузить не через метод класса.
так же еще он мог иметь в виду перегрузку через предка например.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.06.2014, 23:22   #4
sinobithug
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 63
По умолчанию

Цитата:
наверное он подразумевал не перегрузку, а то, что в коде явный вызов операторов
Вроде это и имел ввиду.
А как вызвать его неявно?

Цитата:
можно перегрузить не через метод класса.
Дано комплексное число Его действительную и мнимую часть объявить в private конструктор и деструктор объявить в public потом дополнить класс перегрузкой префикного инкремента (++)

Последний раз редактировалось sinobithug; 19.06.2014 в 23:49.
sinobithug вне форума Ответить с цитированием
Старый 20.06.2014, 07:06   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
А как вызвать его неявно?
Именно так, как вам указали выше:
Код:
i++;
i1++;
Хотя вы вроде ниже это и делаете...

А перегрузка не через метод класса выглядит так (с учетом семантики префиксного инкремента: увеличили на единицу и вернули ссылку на измененный объект если вдруг кому понадобится):
Код:
complex& operator++(complex& c)
    {
    c.Increment();
    c.Incrementl();
    return c;
    }
Это тоже в некотором роде дополнение класса инкрементом. Правда, тогда эту перегрузку нельзя использовать в виде c.operator++().

Кстати, я бы посоветовал вам использовать традиционные обозначение re и im для действительной и мнимой частей соответственно. А то от GetItsVal1, честно говоря, в глазах рябит, и сложно разбираться. И еще #include <vcl.h> тут лишнее, вы нигде эту библиотеку все равно не используете, в консольных приложениях вообще она обычно не нужна.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка оператора c++ Arrioh Общие вопросы C/C++ 2 05.01.2013 08:46
Перегрузка оператора^ Voronar Общие вопросы C/C++ 2 03.12.2012 23:26
Перегрузка оператора [] dbazulev Общие вопросы C/C++ 1 02.12.2012 20:19
перегрузка оператора ++ nhr Помощь студентам 0 04.05.2011 21:20
явная перегрузка оператора присваивания С++ Aion Помощь студентам 0 30.01.2011 14:17