Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ignore(), объясните в чем проблема 
V
    Опции темы
qwerty233
Дата 14.1.2011, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 3.10.2010

Репутация: нет
Всего: нет



При инициализации двух объектов класса путем cin >> object, первый инициализируется нормально, а второй нет. При удалении первого оператора( input.ignore() ) в перегруженной операции >> все работает нормально. Прошу объяснить в чем здесь проблема.
Код

Complex.h
#ifndef COMPLEX_H
#define COMPLEX_H

#include <iostream>
using std::istream;
using std::ostream;

class Complex
{
    friend istream &operator>>( istream &, Complex & );
    friend ostream &operator<<( ostream &, const Complex & );
public:
    Complex( double = 0, double = 0 );
    Complex operator+( const Complex & );
    Complex operator-( const Complex & );
    Complex operator*( const Complex & );
    bool operator==( const Complex & ) const;
    bool operator!=( const Complex & ) const;
private:
    double real;
    double imaginary;
};

#endif

Complex.cpp

#include <iostream>
using std::cout;

#include "Complex.h"

Complex::Complex( double realPart, double imaginaryPart )
:real( realPart ), imaginary( imaginaryPart )
{}

Complex Complex::operator+( const Complex &operand2 )
{
    return Complex( real + operand2.real,
        imaginary + operand2.imaginary );
}

Complex Complex::operator-( const Complex &operand2 )
{
    return Complex( real - operand2.real,
        imaginary - operand2.imaginary );
}

Complex Complex::operator*( const Complex &operand2 )
{
    return Complex( ( real * operand2.real ) - ( imaginary * operand2.imaginary ),
        ( real * operand2.imaginary ) - ( imaginary * operand2.real ) );
}

bool Complex::operator==( const Complex &object2 ) const
{
    if( real != object2.real &&
        imaginary != object2.imaginary )
        return false;

    return true;
}

bool Complex::operator!=( const Complex &object2 ) const
{
    return !( *this == object2 );
}

istream &operator>>( istream &input, Complex &c )
{
    input.ignore();
    input >> c.real;
    input.ignore(2);
    input >> c.imaginary;
   
    return input;
}

ostream &operator<<( ostream &output, const Complex &c )
{
    output << '(' << c.real << ", " 
        << c.imaginary << ')';

    return output;
}



Это сообщение отредактировал(а) qwerty233 - 14.1.2011, 21:57
PM MAIL   Вверх
bsa
Дата 15.1.2011, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



не стоит пользоваться ignore в данном контексте. лучше разбирай строку более корректно.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.