CS106L:Lecture 12:Operator Overloading ppt笔记
Q:为什么使用operator操作符operators能够表示函数不能直观表示的意思e.g.add(Money(100), Money(50))与Money(100) Money(50)不能被重载的operator::?..*sizeof()typeif()cast()操作符重载语法return_type operatorsymbol(parameter_list)e.g.boolStanfordID::operator(constStanfordIDother)const{returnidNumberother.getIdNumber();}Non-member overloading有两种重载operator的方法Member overloading:在类{}里面定义重载操作符Non-member overloading:在类{}外面定义重载操作符定义操作符左右两侧均为传递的参数更推荐Non-member overloading允许左侧不一定是类bool operator(int lhs, const StanfordID rhs)允许对更多类进行操作符重载且两个方向都可以使用操作符 (class stringorstring class)non-member operator重载时无法访问this-和类的变量不要同时重载member operator和non-member operator会造成歧义friendfriend允许非成员函数和类访问其他类的private物体在目标类的.h文件中定义operator重载函数为friende.g. .h filepublic:StanfordID(std::string name,std::string sunet,intidNumber);...friendbooloperator(constStanfordIDlhs,constStanfordIDrhs);}.cpp file//在non-member operator重载时就可以访问private变量#includeStanfordID.hbooloperator(constStanfordIDlhs,constStanfordIDrhs){returnlhs.idNumberrhs.idNumber;}Rules and Philosophies操作符表达的意思必须非常清楚明白尽可能与原本的含义近似运用rule of contrariety如在重载时同时重载!