请先看结构体的基本运用

结构体运算符->

->运算符一般用来访问结构体中的指针内容,格式结构体名->指针名,例如s结构体中的*p指针:

1
s->p

this

this是当前结构体的指针,也可以用this来访问。

结构体函数

结构体不仅可以放变量也可以放函数,不过我们一般叫结构体里的函数为方法,也是通过.运算符来访问。

结构体函数里面可以直接访问当前结构体的变量。

当传入的参数和结构体某一个变量一样的话就可以使用刚学过的this来区分。

例如定义一个获取结构体中 $a,b$ 变量之和,可以写出如下代码

1
2
3
4
5
6
7
8
9
struct s{
int a,b;
string name;
int sumab(){
return a+b;
}
};
/*使用示例:s x={1,2};
cout<<x.sumab();*/

还有计算与另一个 $a,b$ 的和。

1
2
3
4
5
6
7
8
9
10
struct s{
int a,b;
string name;
void add(int a,int b){
this->a+=a;
this->b+=b;
}
};
/*使用示例:s x={1,2};
x.add(10,20);*/

构建函数与消除函数

构建函数

函数名称为结构体名的函数就是构建函数,构建函数会在结构体初始化时调用。

构建函数没有返回值与函数类型

消除函数

函数名称为~结构体名的函数就是消除函数,消除函数会在结构体被卸载时调用。

消除函数没有返回值与函数类型
完整示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
using namespace std;

struct s{
int a,b;
s(){//默认的构建函数,一般在调用时不需要()
a=10,b=10;
}
s(int x,int y){
/*如果你只写了这个函数
没有写第一个函数的话,就不能直接s x,而是要s x(1,2)*/
a=x,b=y;
}
~s(){
cout<<"这个函数要被卸载了,a="<<a<<",b="<<b<<"\n";
}
};
int main(){
s x;
cout<<x.a<<','<<x.b<<endl;
cin>>x.a>>x.b;
cout<<x.a<<','<<x.b<<endl;
s y(10,20);//也可以写成s y=s(10,20);
cout<<y.a<<','<<y.b;

return 0;
}

只读函数

在函数后加上const会让这个函数变为只能读取变量,不能修改变量的函数。例如:

1
2
3
4
5
6
7
struct s{
int x,y;
int getx() const{
//x=10,这样是不行的因为函数被const修饰了
return x;
}
};

公有与私有

我们使用publicprivate来规定变量的公有私有,初始都是public

私有是只有在结构体内部可以使用的,外部访问不了,使用场景:例如你要写一个分数(例如二分之一)结构体,你想让外部随便改你的分子分母,因为你想修改时要自动约分,你可以把 $a,b$ (分子分母)设为私有,然后有一个geta()和getb()函数用来获取,然后有seta(a),setb(b)函数来修改分母分子,修改时使用约分函数让 $a,b$ 都/__gcd($a,b$),这样就可以修改自动约分。

公有是像前面一样可以直接访问的。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct s{
private:
//私有
int a,b;
public:
//公有
int geta() const {
return a;
}
int getb() const {
return b;
}
void seta(int aa){
a=aa;
a=a/__gcd(a,b);
b=b/__gcd(a,b);
}
void setb(int bb){
b=bb;
b=b/__gcd(a,b);
a=a/__gcd(a,b);
}
};

运算符重载

此章节难度大大大大大大,新手勿碰!此章节不用搞懂,有个印象就行了!

我不信了!!!