У меня задание реализовать класс Binary и перегрузить в классе оператор +. Я это реализовал, но при выводе выдает неправильный результат. При этом, когда я вызываю метод, все срабатывает правильно. Подскажите, как исправить оператор.
Вот мой код:
#include <iostream>
#include <string>
using namespace std;
class Binary
{
private:
string a; //string b;string k;
public:
Binary()
{
a = "0"; //b ="0";
}
Binary(string num1)
{
a = num1; //b= num2;
}
Binary operator+(const Binary& bnr)
{
//k = "";
//Binary& k;
int c = 0, i = a.size() - 1, j = a.size() - 1;
while(i >= 0 || j >= 0 || c == 1)
{
c += i >= 0 ? a[i --] - '0' : 0;
c += j >= 0 ? bnr.a[j --] - '0' : 0;
a = char(c % 2 + '0') + a;
c /= 2;
}
return Binary(a);
}
string addBinary(string a, string b)
{
string s = "";
int c = 0, i = a.size() - 1, j = b.size() - 1;
while(i >= 0 || j >= 0 || c == 1)
{
c += i >= 0 ? a[i --] - '0' : 0;
c += j >= 0 ? b[j --] - '0' : 0;
s = char(c % 2 + '0') + s;
c /= 2;
}
return s;
}
friend ostream& operator<<(ostream& os, const Binary& b);
};
ostream& operator<<(ostream& os, const Binary& b)
{
os << b.a;
return os;
}
int main()
{
cout << "Hello world!" << endl;
Binary b("1001");
Binary k("1111");
cout << b << " " << endl;
cout << k << " " << endl;
k = b + k;
cout << "result\n";
cout << k << " \n";
Binary n;
cout << n.addBinary("1001", "1111");
return 0;
}
Ну вы же в операторе запарываете собственную строку...
a = char(c % 2 + '0') + a;
Я бы на вашем месте кое-что изменил (все изменения - в приведенном фрагменте):
Binary(const string& num1)
{
a = num1; //b= num2;
}
Binary operator+(const Binary& bnr) const
{
return Binary(addBinary(this->a,bnr.a));
}
static string addBinary(const string& a, const string& b)
{
Посмотрите все изменения.
я не понел какая цель у вашего класса, но модифицировал, убирая лишнее и ошибки
class Binary
{
string a; //string b;string k;
public:
Binary(string num1 = "") : a(num1) {}
Binary& operator+=(const Binary& bnr)
{
//k = "";
//Binary& k;
int c = 0, i = a.size() - 1, j = a.size() - 1;
while(i >= 0 || j >= 0 || c == 1 //?)
{
c += i >= 0 ? a[i --] - '0' : 0;
c += j >= 0 ? bnr.a[j --] - '0' : 0;
a += char(c % 2 + '0'); //?
c /= 2;
}
return *this;
}
// string addBinary(string a, string b)
// {
// string s = "";
// int c = 0, i = a.size() - 1, j = b.size() - 1;
// while(i >= 0 || j >= 0 || c == 1)
// {
// c += i >= 0 ? a[i --] - '0' : 0;
// c += j >= 0 ? b[j --] - '0' : 0;
// s = char(c % 2 + '0') + s;
// c /= 2;
// }
// return s; это тоже переписать
// }
// friend ostream& operator<<(ostream& os, const Binary& b); это не нужно
};
ostream& operator<<(ostream& os, const Binary& b)
{
os << b.a;
return os;
}
хотя не смотрел подробно определение функций оператор + реализуйте вне класса через +=
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости