简单介绍结构体重载

来源:互联网 发布:观察者模式js 编辑:程序博客网 时间:2024/05/16 04:11

为什么是简单介绍呢…

因为我也不是特别懂

我所有的operator的知识都是从我的学长spark给我发的一段代码里头猜出来的

首先,简单的定义

结构体是使用struct定义的
例如

struct room{    int a,b,c,d[123];};

这样我们就有了room类型的数据结构
在该结构当中,含有三个变量a,b,c

使用room定义新的变量

room t;cout<<t.a<<endl;cout<<t.d[1];

此处的定义和int、long long之类的定义是一样的
同时,当我们想调用定义的t的a变量时,通过调用t.a即可
调用数组也是相同的用法,相当于就是在d前增加了一个前缀t.来区分其他room类型的数据当中的d数组

我们也可以定义room类型的数组

room t[100]cout<<t[1].d[1]

在这种程度上来讲,结构体仅仅是多了几个变量,同时也增加了几个后缀来调用这些变量

然后,定义操作

我们重新定义一下room类型的数据结构
这次我们将它定义得正式一点

我们希望room能够表示某个房间当中的人,空位,人数,以及输出它内部有哪些人,踢出第x个人,清空数据
struct room{    int people[500],seat,count;    void out()    {        for(int i=0;i<=seat;i++)            cout<<people[i]<<endl;    }    void clear()    {        memset(people,1,sizeof(people);        count=0;    }    void kick(int x)    {        people[x]=0;        count--;    }}
这样定义,我们的目的就达到了比如,我们定义房间a当中有十个空位、三个人1,2,3那么
room a;a.seat=10;a.count=3;a.people[1]=1;a.people[2]=2;a.people[3]=3;
这样定义就完成了当我们想知道每个座位上的人,踢掉第2个,然后将这些人清空
a.out();a.kick(2);a.clear();
此处的使用与queue的push()、pop()的调用方式类似

以上内容均为瞎逼胡扯

下面讲最厉害的重载

operator

operator的作用就是重新定义某种运算符
比如,重新定义矩阵的加法

struct matrix{    int mat[20][20];    matrix()//初始化    {        memset(mat,0,sizeof(mat));    }    operator +(const int x)//把当前矩阵每个位子都加上数字x    {        matrix c=matrix();        for(int a=0;a<=19;a++)        for(int b=0;b<=19;b++)            c.mat[a][b]=mat[a][b]+x;        return c;    }    operator +(const matrix&y)//把当前矩阵和y矩阵相加    {        matrix c=matrix();        for(int a=0;a<=19;a++)        for(int b=0;b<=19;b++)            c.mat[a][b]=mat[a][b]+y.mat[a][b];        return c;    }}
上述操作定义了martix类型与int和matrix相加的操作operator后的符号是重载(重新定义)的符号,此处为'+'          而符号后面的括号内的类型是相加的类型如    operator+(const int x)    定义的就是matrix+int的操作    const使x不可更改(虽然不知道有什么用,但是用它就是了)而    operator+(const matrix & y)    当中的&符号,我也不知道有啥用    但是好像操作的对象是同种类型,如matrix+matrix时就要用&而在操作时还要新声明一个maxtrix c=matrix()的目的是在计算三个matrix x,y,zx=y+z时,如果不定义c,那么y+z就会使得y的值被更改我们用c.mat[x][y]=mat[x][y]+y.mat[x][y]就可以避免原矩阵的数字被更改    而使用matrix()来初始化,纯粹是为了表示这个数据类型是有初始化的操作的    因为我们无法在定义mat的时候直接赋处置,所以我们可以使用matrix()来完成赋初值另外,在调用自身的mat时,是不需要加上前缀的但是调用加上的矩阵y的mat时,要加上前缀->y.mat

差不多就是这些了吧…有不懂的可以提问,虽然我也不清楚很具体的知识
但是还是可以一起找找答案

并且我知道这种博客写出来很多东西可能也只有我看得懂
所以看了之后有很多疑惑的地方很正常,提问就好了