그래서 C++ 코딩에 상당히 익숙하며 현재 프로그래밍 과정에서 연산자 오버로딩 및 friend 함수에 대해 배우고 있습니다. 우리는 생성자와 오버로딩 된 연산자의 종류가 다른 클래스 Money를 만들라고 들었습니다. 이 프로그램은 개인 멤버 변수에 대한 포인터가 없었 더라면 훨씬 쉬웠지만, 지금은 약간 이상합니다.오버로드 된 연산자와 멤버 포인터를 사용할 때 세그먼트 오류
나머지 오버로드 된 연산자 함수를 정의하기 전에 이에 대한 도움이 필요했습니다. 기본적으로 나는 Money 클래스의 두 객체를 함께 추가하지만, 프로그램을 실행할 때 세그먼트 오류가 계속 발생합니다. 이 포인터와 액세스 할 수없는 메모리에 액세스 할 수있다 알지만, 내가 잘못 된지 모르겠습니다.
지금까지는 짧은 프로그램이므로 코드를 읽기 쉬워야합니다. 어떤 도움을 주시면 감사하겠습니다!
class Money
{
public:
Money(int d=0, int c=0);
Money(const Money&);
// ~Money();
Money& operator=(const Money&);
Money operator+(const Money&) const;
Money operator-(const Money&) const;
Money& operator*(double);
Money& operator/(double);
friend istream& operator>>(istream&, Money&);
friend ostream& operator<<(ostream&, const Money&);
private:
int* dollars;
int* cents;
};
int main()
{
Money m1(3, 43), m2(4, 64);
Money m3 = m1 + m2;
return 0;
}
Money::Money(int d, int c)
{
*dollars = d;
*cents = c;
}
Money Money::operator+(const Money& m1) const
{
Money result;
*result.dollars = *this->dollars + *m1.dollars;
*result.cents = *this->cents + *m1.cents;
return result;
}
왜 달러와 센트를 정수에 대한 포인터로 정의합니까? 그건 나쁜 생각이야. 실제로 초기화하지 않고 이러한 정수를 사용하려고 시도합니다 (포인터를 derefence). – NineBerry
달러와 센트에 int *를 사용해야합니까? 할당이 허용하는 경우 일반 int를 대신 사용하십시오. – Darryl
달러와 센트에 int에 대한 포인터를 사용해야합니다. 내가 할 수 있으면 좋겠다! 동적 메모리 할당에 대한 자세한 내용은 아직 배울 수 있습니다. –