zoukankan      html  css  js  c++  java
  • C++运算符重载笔记

    今天看了c++中的运算符重载,记录一下,以备后面查看:

    #include <iostream>
    using namespace std;
    
    class F{
    	int n;
    	int d;
    	void reduce(){
    		int mcd = maxcd(n < 0 ? -n : n, d);
    		if(mcd != 1){
    			n /= mcd;
    			d /= mcd;
    		}
    	}
    
    	public:
    	F(int n=0, int d=1):n(n), d(d){
    		if(d == 0) throw "分母不能为零";
    		if(d < 0) {
    			this->d = -this->d;
    			this->n = -this->n;
    		}
    		reduce();
    		cout << "F(" << n << '/' << d << ")" << endl;
    	}
    
    	static int maxcd(int a, int b){
    		if(a == 0) return b;
    		return maxcd(b%a, a);
    	}
    
    	friend ostream& operator<<(ostream& o, const F& f){
    		o << f.n << '/' << f.d;
    		return o;
    	}
    
    	friend F operator+(const F& lh, const F& rh){
    		return F(lh.n * rh.d + lh.d * rh.n, lh.d * rh.d);
    	}
    
    	//成员函数,少一个参数(当前对象作为第一个操作数)
    	F operator*(const F& rh)const{
    		//匿名对象
    		return F(n*rh.n, d*rh.d);
    	}	
    
    	friend F operator~(const F& f){
    		return F(f.d, f.n);
    	}
    
    	bool operator!()const{
    		return n==0;
    	}
    };
    
    int main(){
    	F f1;
    	F f2(3);
    	F f3(6, 12);
    	F f4(5, 3);
    	F f5(2, 9);
    	cout << f3 << ',' << f4 << endl;
    	cout << F::maxcd(392, 856) << endl;
    	cout << f3 + f4 << endl;
    	cout << f3*f4 << f2 * f3 * f4 << endl;
    	cout << "~f3 = " << ~f3 << endl;
    	cout << "!f3 = " << !f3 << endl;
    
    	return 0;
    }
    

    注意点:

    1、匿名对象

    2、成员函数和友元函数对运算符重载的区别

    3、临时变量只能传给引用常量(const F&),比如f1 + f2 + f3中f1 + f2返回的是一个临时变量

    4、友元函数既可以在类内部实现,也可以在类外部实现,不属于类的成员函数

    5、const加在方法上则说明该方法内的this指向的对象只能读取不可修改。


  • 相关阅读:
    Delphi xe8 分割字符串太方便了
    Delphi XE8 如何删除Castalia这个渣渣
    Delphi XE7 XE8 开发iphone运用
    美丽图标网站
    xe6输出枚举类型每项字符串
    Delphi XE6记录类型赋值
    XE6 ShortString与String相互转换
    关于Delphi XE6的学习
    Delphi Byte数组与String类型的转换
    Delphi XE6 TStringHelper中的string类型转换
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468688.html
Copyright © 2011-2022 走看看