メンバーおよび関数としてのC++オーバーロード演算子を同時に使用しますか?ここで演算子のオーバーロードを設定しようとしています。
いずれの場合も、友人およびメンバーとしてのoperator+のオーバーロードに問題はありません。しかし、友人として+演算子をオーバーロードしようとすると、同時にメンバーとして友人をオーバーロードしようとすると、エラーが発生します。
ここでちょっと混乱しています。私も意味をなさない何かをしようとするかもしれませんか?私のコードをチェックして、私がそれを解決できるかどうかを確認してください。ケース3は、エラーを生成するケースです。ありがとう!
CASE1フレンドとしてのオーバーロード: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; }
CASE1友達としての過負荷: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; };
CASE1フレンドとしてのオーバーロード: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"; }
メンバーとしてのCASE2オーバーロード:Source.cpp / Time.h / Time.cppSource.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