C++ 멤버와 함수로 연산자를 동시에 오버로드합니까? 여기서 연산자 오버로딩을 설정하려고합니다.C++ 멤버와 함수로 연산자를 동시에 오버로드합니까?
나는 각 경우 친구 및 회원으로 operator + overloading에 문제가 없습니다. 하지만 과부하하려고 할 때 + 연산자를 친구로 사용하면 동시에 친구가 구성원으로 오류가 발생합니다.
종류가 혼동합니다. 나는 심지어 말이 안되는 것을하려고 노력할 수도있다. 내 코드를 확인하고 해결할 수 있는지 확인하십시오. 사례 3은 ERROR 생성 사례입니다. 감사! 친구로
사례 1 과부하 : Source.cpp 친구로
#include <iostream>
using namespace std;
#include "Time.h"
int main() {
Time planning; Time coding(2, 40);
Time fixing(5, 55); Time total;
total = coding + fixing;
cout << "coding + fixing = ";
total.Show();
cout << endl;
cin.get(); return 0; }
사례 1 과부하 : Time.h 친구로
#pragma once
class Time
{ int hours; int minutes;
public:
Time(void);
~Time(void);
Time(int, int m = 0);
void AddMin(int);
void AddHr(int);
void Reset(int h=0, int m=0);
friend const Time operator+(const Time&, const Time&);
void Show() const; };
사례 1 과부하 : Time.cpp
#include "Time.h"
#include <iostream>
using namespace std;
Time::Time(void) { hours = minutes = 0;}
Time::~Time(void) {}
Time::Time (int h, int m) { hours =h; minutes = m; }
void Time::AddMin(int m) {minutes+=m; hours+=minutes/60; minutes%= 60; }
void Time::Reset(int h, int m) {hours = h; minutes = m;}
const Time operator+(const Time & t1, const Time& t2) {
Time sum;
sum.minutes = t1.minutes + t2.minutes;
sum.hours = t1.hours + t2.hours + sum.minutes/60;
sum.minutes %= 60;
return sum; }
void Time::Show() const
{ cout << hours << " hours, " << minutes << " minutes"; }
012 회원으로 3,516,
CASE2 과부하 : Source.cpp/Time.h/Time.cpp Source.cpp // 같은
Time.h
const Time operator+(const Time&) const; // declaration
Time.cpp
const Time Time::operator+(const Time& t) const {
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes/60;
sum.minutes %= 60;
return sum; } // function definition
사례 3 : 오류; 동시에 친구와 구성원으로 연산자 +를 오버로드하려고 Source.cpp // 같은
Time.h
friend const Time operator+(const Time&) ; // declaration
Time.cpp
friend const Time operator+(const Time& t) {
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes/60;
sum.minutes %= 60;
return sum; } // function definition
HTML로 포맷을 시도하지 마십시오. 웹 페이지에는이를위한 도구가 있습니다. 화면에 입력하고 서식을 적절하게 적용하기 만하면됩니다. 특히 삽입 된 HTML을 사용하면 코드 형식을 지정하기가 어려우므로 (보통 코드를 선택하고 {} 버튼을 누르기 만하면됩니다) –
읽기 어렵 기 때문에 오류가 표시되지 않지만 IIUC에서는 1) , 그것은 2)와 함께 작동하고, 둘 다 컴파일러는 어느 하나를 사용할지 모른다. 그것에 대해 혼란스러운 점은 무엇입니까? –
그래서 매우 쉽게 배울 수있는 마크 다운의 flaavor를 사용합니다. –