结构体成员函数与运算符重载

题单介绍

结构体成员函数: 定义结构体,如果只能定义成员变量的话,那么结构体的用处就没有那么大。用起来也没有那么方便。 当我们对一个结构体做某一个操作时,在外面定义函数,然后把结构体当做参数,是一种可行的方案。 但是这样在函数很多的时候很可能导致函数重名。所以我们可以把一些结构体专用的函数定义在结构体内部。 比如: ``` struct vector{//定义二维向量 int x,y; void input(){//从屏幕读入两个整数,作为这个向量的x坐标和y坐标 scanf("%d%d",&x,&y); } void output(){//输出这个向量到屏幕 printf("%d %d\n",x,y); } double length(){//求这个向量的长度 return sqrt(x*x+y*y); } }; ``` 在定义了这3个成员函数后,我们就可以使用了。 比如: ``` vector a; a.input();//读入两个数,作为a.x和a.y a.output();//输出a.x和a.y printf("%lf",a.length());//输出向量a的长度 ``` 构造函数: 在定义结构体时,无法给它赋初始值。必须定义完后再对其成员变量赋值。 所以引入构造函数,能更方便的给结构体赋初始值。 ``` struct vector{//定义二维向量 int x,y; //构造函数没有返回值,函数名与结构体名字相同 vector(){}//默认的构造函数,不给初始值时什么都不做 vector(int xx,int yy){//若定义时给两个值,那么将其存下 x=xx; y=yy; } }; 使用时: vector p;//不给初始值 vector q(1,2);//定义一个初始值为q.x=1,q.y=2的vector变量 ``` 结构体运算符重载: c++中的基本数据类型都是支持多种运算的。比如最简单的四则运算。 而我们用结构体定义的新的数据类型却不支持任何运算,这就显得这种新的数据类型不够好用。 所以,c++还支持定义结构体之间的运算操作。 比如: ``` struct vector{//定义二维向量 int x,y; //定义加法,其中operator是关键字,不可以改。 //由于加法是二元运算符,所以必须有一个参数 vector operator+(vector b){ vector c; c.x=x+b.x; c.y=x+b.y; return c; } //定义内积(点积) int operator*(vector b){ return x*b.x+y*b.y; } //定义数乘 vector operator*(int b){ vector c; c.x=x*b; c.y=y*b; return c; } }; 使用方法: vector p,q; int k; p+q;//算出向量和 p*q;//算出向量内积 p*k;//算出向量数乘(vector要在前,int要在后) ```

题目列表