【c++自学笔记03】
//2-4 操作符重载------operator // 并不是所有操作符都可以重载 //例 #include "iostream" using namespace std; struct comp //定义复数的结构体 { double real; double image; }; comp operator+(comp one,comp another) //重载comp的 + 法 { one.real+=another.real; one.image+=another.image; return one; } comp add(comp one,comp another) //重载comp的 + 法 { one.real+=another.real; one.image+=another.image; return one; } int main(int argc, char const *argv[]) { /* code */ comp a,b,c; a.real=1; a.image=2; b.real=3; b.image=4; c=a+b; //等价 a=1+2i b=3+4i c=a+b=4+6i 虚部相加,实部相加 cout<<"c=a+b;\t\t"<<"c.real="<<c.real<<"\tc.image="<<c.image<<endl; // 运算符重载的本质是函数调用 下面可以实现一样的效果 c=add(a,b); cout<<"c=add(a,b)\t"<<"c.real="<<c.real<<"\tc.image="<<c.image<<endl; return 0; }
输出结果如下
c=a+b; c.real=4 c.image=6
c=a+b; c.real=4 c.image=6
c=add(a,b) c.real=4 c.image=6
#笔记#// 2-5 默认参数---表面意思就是在函数定义时给形参一个默认值,如果这个形参没有传入对应的实参值,那么它则使用默认值 #include "iostream" using namespace std; //默认规则1:从右往左默认,中间不能跳跃 void fun1(int a,int b,int c=3) //我们只能给c设置默认值,或者b和c同时设置默认值,或者a,b,c都同时设置默认值 { cout<<a<<b<<c<<endl; } /* 下面都是错误的函数定义 void fun1(int a=1,int b,int c) //没有从右往左 { cout<<a<<b<<c<<endl; } void fun1(int a=1,int b,int c=3) //中间跳跃 { cout<<a<<b<<c<<endl; } */ // 默认规则2:函数声明和定义一体时,默认参数在定义(声明)处,声明在前,定义在后时,默认参数在声明处 void fun2(int a=1,int b=2,int c=3); //这是一个函数声明,这个函数的定义在后面,所以默认参数要在声明处 //默认规则3:一个函数不能既作重载又作默认参数,当你少些一个参数的时候,会参数二义性 // 例如 void fun3(int a,int b,int c=3) { cout<<a*b*c<<endl; } void fun3(int a,int b) { cout<<a+b<<endl; } // 对于上面的两个函数,当调用传递两个实参的时候,系统就不知道该调用哪个函数,产生二义性 int main(int argc, char const *argv[]) { /* code */ // 对于规则 fun1(1,2); fun2(); return 0; } void fun2(int a,int b,int c) //这个时候要注意,当声明和定义不在一起的时候,定义的时候不能写默认参数,定义的时候不能写默认参数,定义的时候不能写默认参数, { cout<<a+b+c<<endl; }