小编发现其实理论知识也很重要,没有好的基础框架,其他的都是徒劳,最近有思考很多关于学习的方法,其实最好的新知识学习方法就是即使消化,过后复习的也会很轻松,要对自己有足够的自信,不能认为,自己学不会这些知识点,要多次学习,这是一个错误的认知。
运算符重载的方法
通过定义承载运算符的函数使得指定的运算符,不仅能实现原有的功能而且能实现在函数中指定的新功能(运算重载实际上是函数的重载)
格式
函数类型 operateor 运算符名称(形参表)
{
对运算符的承载处理;}
注:operator是关键字 ,运算符名称是c++已经有的运算符号
2函数名由operator 和运算符号构成
3在声明了函数运算符重载后,执行表达式的过程就是调用函数的过程
eg两个整数相加可以理解为
int operatror+(int a,int b)
{
return (a+b);
}
重载运算符的规则
1 c++不允许用户定义新的运算符,只能对已经存在的c++运算符号进行重载;
2,c++允许重载的运算符号
这部分只用记住不能重载的就好啦哈哈哈
.(成员访问指针)
*(成员指针访问运算符)
::(域运算符)
sizeof (长度运算符)
?:(条件运算符)
注:前两个是为了保证访问成员的功能不改变,中间两个是因为他们的运算对象是类型而不是变量或者一般表达式,不具备重载的特征
3重载不能改变运算符的操作数的个数
4,重载不能改变运算符的优先级
5 ,重载不能改变运算符的结合性
6,重载运算符不能有默认的参数
7,重载的运算符必须和用户定义的自定义的对象一起使用,其参数至少有一个是类对象(或者类对象的引用)
eg:
int operator+(int a,int b){return (a-b);}
8 ,=和&不必用户重载
注:“=”可以用于每一个类对象,系统为每一个新声明的类重载了一个赋值运算符,它可以逐个复制类的数据成员,但是有时系统提供的默认对象赋值不能满足程序的要求,例如指向动态分配内存的指针成员时,复制此成员时就可能出现危险,需要自己定义赋值运算符
9,理论上说,可以将个运算符重载为任意的操作,但是,应该使得运算符的功能类似于该运算符作用于标准类型数据时实现的功能
运算符作为类的成员函数和友元函数
类成员函数
有一个参数是隐含的,运算符函数是用this指针隐式访问对象中的成员
eg c1+c2;
编译系统解释为c1.operator+(c2);
友元函数
运算符函数不再作为成员函数,而是类外的普通函数
编译系统会解释为operator+(c1,c2)
俩者都可以,但是若是成员函数,运算表达式的第一个参数必须是类的对象,而且与运算符函数的类型相同,由于友元函数不是成员函数,所以在类的形参列表中必须有两个参数,不能省略,但是友元函数不满足交换律;
使用惯例
(1)“=”,“[ ]", "( )", "->"必须用成员函数重载。
(2)"<<",">>",类型转换运算符函数只能作为友元函数;
(3)单目运算符和符合运算符通常重载为成员函数
(4)双目运算符通常重载为友元函数