Project Euler 챌린지에서 사용하기 위해 매우 큰 숫자를 처리하는 클래스를 만들기 위해 노력하고 있습니다. 나는 클래스와 함께 작동하기 위해 < <과 +를 오버로드했다. 다음 컴파일하고 제대로 작동 :오버로드 된 멤버 함수 오버로드 된 보내기 결과 << 컴파일 오류가 발생합니다
BigNum a(400000000);
BigNum b(400000000);
cout << (a + b);
오류는 다음과 같습니다 : 오류 :
가BigNum a(400000000);
BigNum b(400000000);
BigNum c;
c = a + b;
cout << c;
다음은 컴파일 오류가 발생하지 않습니다 '연산자 < <'에 대한 일치를 표준 '에 :: < < COUT 연산자의 bignum : + (CONST은 &의 bignum) 여기 CONST (((CONST의 bignum &) ((CONST의 bignum *) (& b)))) "참조 용
이다/* BigNum.h */
#include <iostream>
#include <vector>
class BigNum {
public:
BigNum();
BigNum(const BigNum &src);
BigNum(int num);
void print(std::ostream *os);
public:
BigNum &operator=(const BigNum &src);
BigNum &operator+=(const BigNum &src);
const BigNum operator+(const BigNum &src) const;
private:
bool negative;
std::vector<int> digits;
};
std::ostream &operator<<(std::ostream &os, BigNum &bNum);
/* BigNum.cpp */
#include "BigNum.h"
BigNum::BigNum() {
digits.push_back(0);
}
BigNum::BigNum(const BigNum &src) {
digits = src.digits;
}
BigNum::BigNum(int num) {
if(num == 0) {
digits.push_back(0);
}
else {
while(num != 0) {
digits.push_back(num % 10);
num /= 10;
}
}
}
void BigNum::print(std::ostream *os) {
int i;
for(i = digits.size() - 1; i >= 0; i--) {
*os << digits[i];
}
}
std::ostream &operator<<(std::ostream &os, BigNum &bNum) {
bNum.print(&os);
return os;
}
BigNum & BigNum::operator=(const BigNum &src) {
if(this == &src) return *this;
digits = src.digits;
return *this;
}
BigNum & BigNum::operator+=(const BigNum &src) {
int carry, i, k;
carry = 0;
if(digits.size() < src.digits.size()) {
digits.resize(src.digits.size(), 0);
}
{
k = src.digits.size();
for(i = 0; i < k; i++) {
digits[i] += src.digits[i];
digits[i] += carry;
carry = 0;
if(digits[i] > 9) {
carry = 1;
digits[i] -= 10;
}
}
k = digits.size();
for(i = src.digits.size(); i < k; i++) {
digits[i] += carry;
carry = 0;
if(digits[i] > 9) {
carry = 1;
digits[i] -= 10;
}
}
if(carry) {
digits.resize(digits.size() + 1, 1);
}
}
return *this;
}
const BigNum BigNum::operator+(const BigNum &src) const {
BigNum result(*this);
result += src;
return result;
}
왜
cout << (a + b);
이 작동하지 않습니다 클래스 정의 및 구현? 명백한 해결 방법이 있지만 왜 이런 일이 일어나는지 이해하고 싶습니다. 나는 C++을 처음 사용하기 때문에, 내가 잘못하고 있거나 더 잘할 수있는 일이 있다면 알려 주시기 바랍니다. 고맙습니다.
+1 잡기. 그러나 그들은'print' 멤버 함수를 const로 만들 필요가 있습니다. – juanchopanza
@ juanchopanza, 그걸 잡아주지 않았다, 고마워. – chris
감사합니다. 그게 문제를 해결 한 것 같습니다. – vanGogh92