Proszę o podpowiedź w jaki sposób napisać konstruktor dla operatorów +=, -=, *=, /=, >=, <.
np. dla -= mam błąd: "invalid conversion from int' to
char*'"
dla = invalid operands of types char*' and
char const' to binary `operator*'
#ifndef DUZALICZBA_H_
#define DUZALICZBA_H_
#include <iostream>
#include <string.h>
using namespace std;
class DuzaLiczba
{
private:
char* m_wartosc;
bool identyczne(const char*, const char*);
public:
/*
* konstruktor bezargumentowy inicjalizuje obiekt wartością 0
*/
DuzaLiczba();
/*
* konstruktor z argumentem typu int inicjalizuje obiekt wartością stało-liczbową
*/
DuzaLiczba(int number);
/*
* konstruktor z argumentem typu char* inicjalizuje obiekt podaną wartością
*/
DuzaLiczba(char* wartosc) :
m_wartosc(strdup(wartosc))
{
}
DuzaLiczba(const DuzaLiczba& object);
~DuzaLiczba();
int countDigitsInInt(int number);
DuzaLiczba& operator=(const DuzaLiczba&);
DuzaLiczba& operator=(const char*);
DuzaLiczba& operator=(int);
friend bool operator==(const DuzaLiczba&, const DuzaLiczba&);
friend bool operator==(const DuzaLiczba&, char*);
friend bool operator!=(const DuzaLiczba&, const DuzaLiczba&);
DuzaLiczba& operator+=(DuzaLiczba const&);
DuzaLiczba& operator+=(int);
DuzaLiczba& operator-=(DuzaLiczba const&);
DuzaLiczba& operator*=(DuzaLiczba const&);
DuzaLiczba& operator/=(DuzaLiczba const&);
bool operator>=(DuzaLiczba const&) const;
bool operator>=(int) const;
DuzaLiczba operator+(DuzaLiczba);
friend DuzaLiczba operator-(DuzaLiczba, DuzaLiczba);
DuzaLiczba operator-();
DuzaLiczba operator*(DuzaLiczba);
DuzaLiczba operator/(DuzaLiczba);
DuzaLiczba operator!();
bool operator<(DuzaLiczba const&) const;
bool operator<(const char*) const;
friend ostream& operator<<(ostream&, const DuzaLiczba&);
friend istream& operator>>(istream&, DuzaLiczba&);
};
#endif /* DUZALICZBA_H_ */
#include <iostream>
#include <cstdio>
#include "DuzaLiczba.h"
using namespace std;
bool identyczne(char* a, char* b)
{
bool result = true;
while (*a != 0) {
if (a != b)
result = false;
a++;
b++;
}
if (*a != 0 || *b != 0)
result = false;
return result;
}
DuzaLiczba::DuzaLiczba()
{
m_wartosc = new char[1];
m_wartosc[0] = '\0';
}
DuzaLiczba::DuzaLiczba(int number)
{
m_wartosc = new char[countDigitsInInt(number) + 1];
sprintf(m_wartosc, "%d", number);
}
DuzaLiczba::DuzaLiczba(const DuzaLiczba& object)
{
m_wartosc = new char[strlen(object.m_wartosc) + 1];
strcpy(m_wartosc, object.m_wartosc);
}
DuzaLiczba::~DuzaLiczba() //destruktor
{
delete[] m_wartosc;
m_wartosc = 0;
}
int DuzaLiczba::countDigitsInInt(int number)
{
int i;
for (i = 0; number > 0; i++)
number = number / 10;
if (i == 0)
i = 1;
return i;
}
DuzaLiczba& DuzaLiczba::operator=(const DuzaLiczba& object)
{
if (this != &object) {
m_wartosc = new char[strlen(object.m_wartosc) + 1];
strcpy(m_wartosc, object.m_wartosc);
}
return *this;
}
DuzaLiczba& DuzaLiczba::operator=(const char* wartosc)
{
m_wartosc = new char[strlen(wartosc) + 1];
strcpy(m_wartosc, wartosc);
return *this;
}
DuzaLiczba& DuzaLiczba::operator=(int number)
{
m_wartosc = new char[countDigitsInInt(number) + 1];
sprintf(m_wartosc, "%d", number);
return *this;
}
bool operator==(const DuzaLiczba& a, const DuzaLiczba& b)
{
return (identyczne(a.m_wartosc, b.m_wartosc)) ? true : false;
}
bool operator==(const DuzaLiczba& a, char* b)
{
return (identyczne(a.m_wartosc, b)) ? true : false;
}
bool operator!=(const DuzaLiczba& a, const DuzaLiczba& b)
{
return (identyczne(a.m_wartosc, b.m_wartosc)) ? false : true;
}
DuzaLiczba& DuzaLiczba::operator+=(DuzaLiczba const& ob)
{
// this->m_wartosc = this->m_wartosc + ob.m_wartosc;
return *this;
}
DuzaLiczba& DuzaLiczba::operator+=(int num)
{
m_wartosc = m_wartosc + num;
return *this;
}
DuzaLiczba& DuzaLiczba::operator-=(DuzaLiczba const& ob)
{
//this->m_wartosc = this->m_wartosc - ob.m_wartosc;
return *this;
}
DuzaLiczba& DuzaLiczba::operator*=(DuzaLiczba const& ob)
{
// this->m_wartosc = this->m_wartosc * ob.m_wartosc;
return *this;
}
DuzaLiczba& DuzaLiczba::operator/=(DuzaLiczba const& ob)
{
// this->m_wartosc = this->m_wartosc / ob.m_wartosc;
return *this;
}
bool DuzaLiczba::operator>=(DuzaLiczba const& ob) const
{
// nie wiem jak to zrobić
return true;
}
bool DuzaLiczba::operator>=(int number) const
{
// nie wiem jak to zrobić
return true;
}
DuzaLiczba DuzaLiczba::operator+(DuzaLiczba ob)
{
// m_wartosc += ob.m_wartosc;
// return DuzaLiczba(m_wartosc + ob.m_wartosc);
return DuzaLiczba();
}
DuzaLiczba operator-(DuzaLiczba ob1, DuzaLiczba ob2)
{
ob1.m_wartosc - ob2.m_wartosc;
return DuzaLiczba(ob1.m_wartosc - ob2.m_wartosc);
}
DuzaLiczba DuzaLiczba::operator-()
{
--m_wartosc;
return DuzaLiczba();
}
DuzaLiczba DuzaLiczba::operator*(DuzaLiczba ob)
{
// m_wartosc * m_wartosc;
// ob1.m_wartosc *= ob2.m_wartosc;
return DuzaLiczba();
}
DuzaLiczba DuzaLiczba::operator/(DuzaLiczba ob)
{
// nie wiem jak to zrobić
return DuzaLiczba();
}
DuzaLiczba DuzaLiczba::operator!()
{
// nie wiem jak to zrobić
return DuzaLiczba();
}
bool DuzaLiczba::operator<(DuzaLiczba const& ob) const
{
// nie wiem jak to zrobić
return true;
}
bool DuzaLiczba::operator<(const char*) const
{
// nie wiem jak to zrobić
return true;
}
ostream& operator<<(ostream& out, const DuzaLiczba& ob)
{
out << ob.m_wartosc;
return out;
}
istream& operator>>(istream& in, DuzaLiczba& ob)
{
in >> ob.m_wartosc;
return in;
}