简单介绍结构体重载

为什么是简单介绍呢…

因为我也不是特别懂

我所有的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,z
x=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

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

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值