成員函式和友元函式 完成二元和一元運算子過載(進階1)
阿新 • • 發佈:2019-01-09
二元運算子過載:
全域性函式:
類中:#include <iostream> using namespace std; class Complex{//複數類 private: int a; int b; friend Complex operator + (Complex &, Complex &);//注意宣告友元函式 public: Complex(int a = 0, int b = 0){ this->a = a; this->b = b; } void print(){ cout << "a: " << a << " " << "b: " << b << endl; } }; Complex operator + (Complex &a1, Complex &a2){ Complex tmp(a1.a + a2.a, a1.b + a2.b); return tmp; } int main() { Complex c1(1, 2), c2(3, 4), c3; c3 = c1 + c2; c3.print(); return 0; }
#include <iostream> using namespace std; class Complex{//複數類 private: int a; int b; public: Complex(int a = 0, int b = 0){ this->a = a; this->b = b; } void print(){ cout << "a: " << a << " " << "b: " << b << endl; } Complex operator - (Complex &a2){ Complex tmp(this->a - a2.a, this->b - a2.b); return tmp; } }; int main() { Complex c1(1, 2), c2(3, 4), c3; c3 = c1 - c2; c3.print(); c3 = c2 - c1; c3.print(); return 0; }
一元運算子過載(難於二元)
類中和全域性函式寫在一塊兒了
#include <iostream> using namespace std; class Complex{//複數類 private: int a; int b; friend Complex operator ++ (Complex &); friend Complex operator ++ (Complex &, int); public: Complex(int a = 0, int b = 0){ this->a = a; this->b = b; } void print(){ cout << "a: " << a << " " << "b: " << b << endl; } Complex operator -- (){ //前置--操作符,成員函式方法實現 this->a --; this->b --; return (*this); } Complex operator --(int){ //後置--操作符,成員函式方法實現 Complex tmp = (*this); this->a --; this->b --; return tmp; } }; Complex operator ++ (Complex &A){ //前置++操作符,用全域性函式實現 A.a ++; A.b ++; return A; } Complex operator ++ (Complex &A, int){//後置++操作符,全域性函式實現 加一個佔位符跟前置加以區分 Complex tmp = A; A.a ++; A.b ++; return tmp; } int main() { Complex c1(1, 2); //前置++操作符,用全域性函式實現 ++c1; //Complex c = operator ++ (c1); c1.print(); //前置--操作符,成員函式方法實現 --c1; //Complex c = c1.operator -- (&c1) c1.print(); //後置++操作符,全域性函式實現 c1++; //Complex c = operator ++ (c1, 0); c1.print(); //後置--操作符,成員函式方法實現 c1--; //Complex c = c1.operator -- (0); c1.print(); return 0; }