===========================================================================================
(1)函数重载和运算符重载
函数重载: 即对一个函数名重新赋予多个的含义,使一个函数名可以多用。代码上体现为相同的函数名不同的参数类型和
参数个数。
int max(int a, int b, int c)
double max(double a, double b)
long max(long a, long b,long c)
运算符重载: 关键子 operator, 重载运算符的规则。
(1)C++不允许用户自定义新的运算符,只能对已有的C++运算符进行重载。
(2)不能重载的运算符有5个: . (成员访问运算符) * (成员指针访问运算符) :: (域运算符) sizeof (长度运算符) ?: (条件3目运算符)
(3)重载不能改变运算符的操作数,优先级,结合性, 不能有默认的参数
(4)重载的运算符必须和用户自定义的类型对象一起使用,其参数中至少有一个是类对象。下面的运算符重载是禁止的。
int operator(int a, int b){ return (a+2*b);}
类型转换函数:将一个类对象转换成一类的数据。类型转换函数只能作为成员函数,不能作为友元函数和普通函数。
语法: operator 类型名( ){
实现转化的语句
}
#include<iostream>
using namespace std;
class Complex{
private:
double _real;
double _image;
public:
Complex():_real(0.0),_image(0.0){};
Complex(double r,double i):_real(r),_image(i){}
~Complex(){};
operator double();
};
Complex::operator double(){
return _real;
}
int main(void){
Complex c(3, 4);
double d;
d = 2.5 + c;
cout << "d = " << d << endl;
return 0;
}
(2)内置函数:在编译时将所调用的函数的代码直接嵌入到主调函数中, 从而提高效率。下图表示普通函数的调用流程。
在1-->2和4-->5的过程中需要“保护现场"(保存程序当前执行的指令地址)和”恢复现场"(根据保存的指令地址回复,然后继续执行)
这两个过程都是需要消耗时间和空间。如果此函数被频繁的调用,则所用的时间增长,从而降低程序的执行效率。而内置函数
直接将function的嵌入到主调函数中,这样省掉步骤2和步骤4, 从而提高效率。因此,内置函数是那些规模较小且频繁调用的简
单函数(不包括复杂的控制语句和循环语句)。