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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2014, 20:14   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Перегрузка инкремента ++

Не понимаю как вызвать перегрузку инкремента: void operator ++( int m ); в функции main,какой синтаксис. Я в main циклично ввожу числа и при каждом проходе цикла введенное число должно передаваться в метод ++. Какой синтаксис этой передачи?
файл queue.h
Код:
#include "stdafx.h"
#ifndef QUEUE_H
#define QUEUE_H
 
class queue
{
    
public:
    queue();
    ~queue();
    void operator ++( int m ); //перегрузка
    void operator --();
    void print();
    void suma();
    void size();
private:
    int a[100];
    int start,end;
     int k; 
     int sum,dob;
};
#endif
main

Код:
...
for(int i=0;i<100;i++)
    { 
        cin>>n; 
        if(n==0)
            break;
        a=++n;             //здесь происходит вызов
    }
...
Вероника99 вне форума Ответить с цитированием
Старый 01.03.2014, 20:22   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

http://habrahabr.ru/post/132014/ - к ознакомлению.
Вам точно нужно перегружать именно инкремент? Просто запись a=++n; означает, по моему мнению (могу ошибаться), префиксный инкремент n и оператор присваивания a. Я бы перегрузил оператор += для добавления чисел в очередь.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 01.03.2014 в 20:25.
BDA на форуме Ответить с цитированием
Старый 01.03.2014, 20:28   #3
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Мне по заданию нужно перегрузить операции ++ (добавление элемента в очередь) и --(удаление элемента с очереди). Не знаю,как это правильно реализовать.
Вероника99 вне форума Ответить с цитированием
Старый 01.03.2014, 20:54   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
#include <iostream>
using namespace std;

class Queue
{
private:
    int a[100];
    int k;
public:
    Queue() : k(0) {}
    friend Queue& operator+= (Queue &left, const int &right) {
        if (left.k < 100)
            left.a[left.k++] = right;
        return left;
    }
    friend ostream& operator<< (ostream &f, const Queue &s) {
        for (int i = 0; i < s.k; ++i)
            f << s.a[i] << " ";
        return f;
    }
};

int
main()
{
    Queue a;
    int n;
    cin >> n;
    a += n;
    a += n;
    cin >> n;
    a += n;
    cout << a;
}
Мой опыт использования C++ не дает ответа, как можно с помощью унарного оператора инкремента добавлять числа в очередь (бинарная операция). Надеюсь, на огонек заглянут профи плюсов и растолкуют этот вопрос.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 01.03.2014 в 20:59.
BDA на форуме Ответить с цитированием
Старый 01.03.2014, 21:01   #5
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Спасибо за ответ. Получилось такое:
main
Код:
...
for(int i=0;i<100;i++)
	{ 
		if(!a++)
			break;
	}
...
queue
Код:
bool queue::operator ++()
{
	int n;
	cin>>n;
    if ( 100== start )
    {
        cout<<"Queue is full!";
        return 0;
    }
	if(n!=0)
	{
		end++;
		if(end==100)
		end=0;

		a[end] = n;
		return true;
	}	
	return false;
}
Вероника99 вне форума Ответить с цитированием
Старый 01.03.2014, 22:11   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Пожалуйста. Очень жаль, что Вас заставляют придумывать такие велосипеды.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 01.03.2014, 23:16   #7
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

А как можно перегрузить вывод дружественной функцией? В обычном виде это функция print:
Код:
void queue::print()
{
    for(int i=start+1;i<end+1;i++)
        cout<<" "<<a[i];
    
}
Делаю такое,компилятор ругается
объявляю в queue.h
class queue
{

public:
...
friend ostream& operator <<(ostream &,const queue&);
...

queue.cpp
Код:
ostream & operator<<(ostream &os,const queue &t) 
{
    cout<<"jh"; //пока просто для примера
}
main

Код:

cout<<a; //вызов,должно быть два параметры,но я не знаю какие именно
Вероника99 вне форума Ответить с цитированием
Старый 01.03.2014, 23:32   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Загляните еще в предыдущую тему.
Код:
class queue
{
...
public:
...
    friend ostream& operator<< (ostream &f, const queue &s) {
        for (int i = s.start; i < s.end; i = (i + 1) % SIZE)
            f << s.a[i] << " ";
        return f;
    }
...
};

...
queue a;
cout << a;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 01.03.2014, 23:57   #9
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Я не очень понимаю,что такое ostream и как вообще использовать этот метод. После написания этого метода, его заменяет только << или cout<< ?
Вероника99 вне форума Ответить с цитированием
Старый 02.03.2014, 00:03   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

ostream - output stream (http://www.cplusplus.com/reference/ostream/ostream/). Есть оператор "<<". Он бинарный, то есть имеет 2 операнда. "left << right":
Код:
friend ostream& operator<< (ostream &left, const queue &right) {
    for (int i = right.start; i < right.end; i = (i + 1) % SIZE)
        left << right.a[i] << " ";
    return left;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка инкремента для даты. С++ Arrioh Помощь студентам 5 04.05.2012 13:06
Перегрузка оператора инкремента applegrub Общие вопросы C/C++ 12 21.12.2011 00:02
Чудеса инкремента Русtam PHP 2 27.11.2011 17:12
получение id инкремента mrgrudge PHP 1 25.02.2011 11:41