🐶博主主页:@ᰔᩚ. 一怀明月ꦿ
❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++
🔥座右铭:“不要等到什么都没有了,才下定决心去做”
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
🐰运算符重载的函数作为类的成员函数和友元函数
🌸运算符重载定义为类的成员函数
🌸运算符重载函数作为类的友元函数
🌸实现“+”,“-“的普通重载函数和友元重载函数
🌸单目运算符"++"和"--"的重载
🐰运算符重载的函数作为类的成员函数和友元函数
🌸运算符重载定义为类的成员函数
将运算符重载定义为类的成员函数的原型在内部声明格式:
class 类名 { ... 返回类型 operator 运算符(参数列表); ... };
在类外定义运算符重载函数的格式:
返回类型 类名::operator 运算符(参数列表) { ... }
🌸运算符重载函数作为类的友元函数
将运算符重载函数作为类的友元函数。它与用成员函数重载运算符的函数的不同在于,成员函数重载运算符的函数本身是类中的成员函数,而友元函数是独立于类外的普通函数。
将运算符重载函数定义为类的友元函数,其原型在类的内部声明格式如下:
class 类名 { ... friend 返回类型 operator 运算符(参数列表); ... };
在类外定义友元运算符重载函数的格式:
返回类型 operator 运算符(参数列表) { ... }
与用成员函数定义的方法相比较,只是在类声明函数原型时前面多了一个关键字friend,表明这是一个友元运算符重载函数,只有声明为友元函数,才可以访问类的private成员;由于友元运算符重载函数不是该类的成员函数,所以在类外定义时不需要加上类名。
🌸实现“+”,“-“的普通重载函数和友元重载函数
#include<iostream> using namespace std; class A { public: A(double x=0,double y=0):a(x),b(y) { ; } void show() { cout<<"运算后的结果为:"<<endl; cout<<"("<<a<<","<<b<<")"<<endl; } A operator+(A& ptr);//运算符普通重载函数 A operator-(A& ptr); // friend A operator+(A& pf,A& pc);//友元运算符重载函数 // friend A operator-(A& pf,A& pc); private: double a; double b; }; A A::operator+(A& ptr)//为什么ptr可以调用私有成员 { return A(a+ptr.a,b+ptr.b); } A A::operator-(A& ptr) { return A(a-ptr.a,b-ptr.b); } //A operator+(A& pf,A& pc) //{ // return A(pf.a+pc.a); //} //A operator-(A& pf,A& pc) //{ // return A(pf.a-pc.a,pf.b-pc.b); //} int main() { A a(1,0),b(0,1),c(1,0),d(0,1),ph; ph=a+b; ph.show(); ph=a-b; ph.show(); return 0; } 普通重载函数和友元重载函数的结果都是一样的 运算后的结果为: (1,1) 运算后的结果为: (1,-1)
大家可能会疑惑,运算符重载函数可以是类的成员函数,也可以是类的友元函数,是否可以既不是类的成员函数也不是类的友元函数,其实是可以的,但是很少会用到,原因是普通函数不能直接访问类的私有成员,由于友元的使用会破坏类的封装,因此从原则上说,要尽量将运算符重载为成员函数。有时为了方便理解,一般将单目运算符重载为成员函数,将双目运算符重载为友元函数。但是也有例外,C++规定,有的运算符(赋值运算符,下标运算符,函数调用运算符)必须重载为类的成员函数,有的运算符则不能重载为类的成员函数(插入运算符"<<"和流提取运算符">>"、类型转化运算符)。
🌸单目运算符"++"和"--"的重载
有两种形式:前置的++ --,后置的++ --
有两种方法:运算符重载的成员函数 运算符重载的友元函数
(1)运算符重载的成员函数:
(1)运算符重载的成员函数 #include<iostream> using namespace std; class A { public: A(int count=0):Count(count) { ; } void show() { cout<<"运算后结果为:"<<Count<<endl; } //前置++,-- A operator++() { ++Count; return *this; } A operator--() { --Count; return *this; } //后置++,-- A operator++(int) { A num=*this; ++(*this); return num; } A operator--(int) { A num=*this; --(*this); return num; } private: int Count; }; int main() { A a(100),b(100),c(100),d(100); (++a).show(); (b++).show(); (--c).show(); (d--).show(); return 0; } 结果为: 运算后结果为:101 运算后结果为:100 运算后结果为:99 运算后结果为:100
(2)运算符重载的友元函数:文章来源:https://www.toymoban.com/news/detail-478346.html
(1)运算符重载的成员函数 #include<iostream> using namespace std; class A { public: A(int count=0):Count(count) { ; } void show() { cout<<"运算后结果为:"<<Count<<endl; } friend A operator++(A& ptr); friend A operator--(A& ptr); friend A operator++(A& ptr,int); friend A operator--(A& ptr,int); private: int Count; }; //前置++,-- A operator++(A& ptr) { ++ptr.Count; return ptr; } A operator--(A& ptr) { --ptr.Count; return ptr; } //后置++,-- A operator++(A& ptr,int) { A num; num=ptr; ++ptr.Count; return num; } A operator--(A& ptr,int) { A num; num=ptr; --ptr.Count; return num; } int main() { A a(100),b(100),c(100),d(100); (++a).show(); (b++).show(); (--c).show(); (d--).show(); return 0; } 结果: 运算后结果为:101 运算后结果为:100 运算后结果为:99 运算后结果为:100
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸 文章来源地址https://www.toymoban.com/news/detail-478346.html
到了这里,关于运算符重载的函数作为类的成员函数和友元函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!