2016-05-20 2 views
-9

Это вопрос о тишине. Реализация класса LargeInt будет использовать динамическую физическую структуру для хранения отдельных цифр целого числа и предоставит некоторые основные операции ввода-вывода и арифметические операции, которые могут выполняться для целых чисел.Это программа на C++, о добавлении двух чисел

В частности, класс должен включать в себя:

  1. конструктора по умолчанию
  2. Функция оператора перегрузка функции operator +
  3. оператора перегрузки функции operator ==
  4. оператора перегружать operator <<
  5. Операторская функция для перегрузки operator >>

Примечание 1: поскольку класс LargeInt не содержит указателей, нет необходимости в конструкторе копирования или деструкторе.

#include "targetver.h" 
using namespace std; 

class LargeInt 
{ 
private: 
    char datain[200]; 
    int databit[200]; 
    int len; 
    int overflow; 
    LargeInt(char *x, int inlen) 
    { 
    int i = 0; 
    int j = inlen - 1; 
    len = inlen; 
    overflow = 0; 
    for (i = 0; i < 200; i++) 
    { 
     databit[i] = 0; 
     datain[i] = '\0'; 
    } 
    for (i = 0; i < len; i++) 
    { 
     datain[i] = x[j]; 
     j--; 
    } 
    } 
    ~LargeInt(); 
    void GetDataBit() 
    { 
    int i = 0; 
    for (i; i < len; i++) 
     databit[i] = datain[i] - 48; 
    } 
public: 
    LargeInt& operator+(LargeInt& data); 
    bool operator==(LargeInt& data); 
    LargeInt& operator>>(int x); 
    LargeInt& operator<<(int x); 
}; 

bool LargeInt::operator==(LargeInt& data) 
{ 
    if (this->len != data.len) 
    return false; 
    else 
    { 
    for (int i = 0; i < 200; i++) 
    { 
     if (this->databit[i] == data.databit[i]) 
     continue; 
     else 
     return false; 
    } 
    return true; 
    } 
} 

LargeInt& LargeInt::operator+(LargeInt& data) 
{ 
    LargeInt t("0", 0); 
    int addlen; 
    if (this->len > data.len) 
    addlen = this->len; 
    else 
    addlen = data.len; 
    for (int i = 0; i < addlen; i--) 
    { 
    t.databit[i] = (data.databit[i] + this->databit[i] + t.overflow) % 10; 
    if ((data.databit[i] + this->databit[i] + t.overflow) >= 10) 
     t.overflow = 1; 
    } 
    t.len = addlen; 
    for (int i = 0; i < addlen; i++) 
    { 
    t.datain[i] = t.databit[i] + 48; 
    } 

    return t; 
} 

, когда я строю, он имеет ошибку, как этот

Предупреждение 1 предупреждения C4172: обратный адрес локальной переменной или временным.

+5

Пожалуйста, прочитайте/попробуйте отформатировать вопрос. BTW - Что такое тихий вопрос? –

+0

это может быть Конкретный :-P – Sathish

+1

@Sathish Это _ "специфический тихий" _ ?? :-P ... –

ответ

0
LargeInt& LargeInt::operator+(LargeInt& data) 

удалить & и ваше предупреждение должно уйти. Прямо сейчас возврат ссылается на переменную t, которая является локальной для функции, которая вышла за пределы области к моменту вызова вызывающей функции возврату.

Смежные вопросы