文章目录

  • 一、两者区别
  • 二、struct
  • 洛谷【深基7.例9】最厉害的学生
  • 小结
  • 三、class
  • 四、总结
  • 谈一谈今天悲伤的经历



一、两者区别

class和struct都是用来存储多个变量的,两者的用法的差不多,但存在一下区别:
1.class是引用类型,而struct是值类型。
3.class中默认的成员访问权限是private的,而struct中则是public的。

二、struct

struct是一种结构体,也可以看作是一个数据结构.struct可以用来储存多个变量,最常用的场景就是给你一些学生的基本信息,如姓名,学号,成绩等。让你选出最优秀的学生或给他们排名。这个时候,我们就需要用一种结构来存储每个学生的所有信息,struct就满足这样的条件,也就是说,一个结构体里面可以装下很多个变量。那么,你可能会问,难不成我们要定义很多个结构体来储存变量吗?答案不是的,因为没定义一个结构体,就可以装下很多份资料,但前提是这几份资料的类型一定要相同,就像double不能取余一样。那么,问题又来了,那就是如果我需要存储类型不同的变量,就需要很多的结构体,这个时候,电脑怎么辨别我想用的是哪一个结构体呢?这就引出了结构体的名字,也就是这样:

swift struct和class的区别喵神王巍 struct和class有什么区别?_ci


如图,这是定义的一个结构体,student就是他的名字,但是这个名字的作用并不是很大(当然也并不是没有作用,你不能定义两个名字相同的结构体,不然会Error的),因为在用的时候,我们并不能说名为student的结构体,所以我们还要给结构体定义一个新的标识符,来辨别结构体,如下图的n:

swift struct和class的区别喵神王巍 struct和class有什么区别?_c++_02


在struct里面,如果你想用这个结构体操作,就必须加上这个结构体的“标识符”,类似于下标,不过在结构体里面,没有a[i]这种说法,只能写成n.ch,他的意思为:在n结构体里的ch变量,如果我想用j结构体里的math变量,就要写成j.math。讲到这里,结构体的定义方法也已经展示出来了:

swift struct和class的区别喵神王巍 struct和class有什么区别?_ci_03


就像这样。细心的读者可能又发现了,在这个结构体里面,还出现了一个名为ans的标识符,它是用来储存我们所想要的数据了,用一道题做例子:

洛谷【深基7.例9】最厉害的学生

现有 swift struct和class的区别喵神王巍 struct和class有什么区别?_ios_04 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 swift struct和class的区别喵神王巍 struct和class有什么区别?_c++_05 个字符的仅有英文小写字母的字符串)、语文、数学、英语成绩(均为不超过 swift struct和class的区别喵神王巍 struct和class有什么区别?_ci_06

输入格式

第一行输入一个正整数 swift struct和class的区别喵神王巍 struct和class有什么区别?_ios_04,表示学生个数。

第二行开始,往下 swift struct和class的区别喵神王巍 struct和class有什么区别?_ios_04

输出格式

输出最厉害的学生。

分析:本题需要用循环读入每一个结构体中的数据,经比较,每次将当前最厉害的学生存储进ans里,这样就可以得到最优数据了。
下面是代码:

#include<iostream>
using namespace std;
int i,a;
struct student{
	string v;
	int ch,ma,eng;
}n,ans;                 
int main(){
	ios::sync_with_stdio(false);
	cin>>a;
	for(i=0;i<=a;i++){
		cin>>n.v>>n.ch>>n.ma>>n.eng;
		if(i==0) ans=n;
		else if(n.ch+n.ma+n.eng>ans.ch+ans.ma+ans.eng)
			ans=n;
	}
	cout<<ans.v<<" "<<ans.ch<<" "<<ans.ma<<" "<<ans.eng;
}

小结

struct适用于输入多组同类型数据的题目

三、class

class和结构体差不多,都是用来储存多组同类型变量的,但与struct不同的是,在class中第一个大括号后下一行要写上访问说明符,访问说明符一共有三种:
1.public:该访问说明符之后的各个成员都可以被公开访问,简单来说就是无论 类内 还是 类外 都可以访问。
2.protected:该访问说明符之后的各个成员可以被 类内、派生类或者友元的成员访问,但类外 不能访问。
3.private:该访问说明符之后的各个成员 只能 被 类内 成员或者友元的成员访问,不能 被从类外或者派生类中访问。
其实struct也有访问标识符,但他的访问标识符默认为public,可以省略不写,
下面以刚刚那道题做一个对class的使用示例:

#include<iostream>
using namespace std;
int i,a;
class student{
    public://一定要加冒号
	string v;
	int ch,ma,eng;
}n,ans;                 
int main(){
	ios::sync_with_stdio(false);
	cin>>a;
	for(i=0;i<=a;i++){
		cin>>n.v>>n.ch>>n.ma>>n.eng;
		if(i==0) ans=n;
		else if(n.ch+n.ma+n.eng>ans.ch+ans.ma+ans.eng)
			ans=n;
	}
	cout<<ans.v<<" "<<ans.ch<<" "<<ans.ma<<" "<<ans.eng;
}

四、总结

struct和class都是程序员的必修课,必须掌握。
另外,个人认为,大多数情况下,class要比struct慢一点:

swift struct和class的区别喵神王巍 struct和class有什么区别?_ios_09

swift struct和class的区别喵神王巍 struct和class有什么区别?_标识符_10


当然,我们在选择这两者是,应当三思而后行,选择最符合当前情况下的结构,不要盲目选择。

谈一谈今天悲伤的经历

大约在今天下午三点,我正完成了此篇博客,正当我高兴之时,电脑居然突然闪退了,我忽然想起没有保存…当我找到如何看缓存时,我正找到了我写的博客,我刚准备点打开,可惜手滑点到了删除…郁闷了三小时,我又开始重写博客,也就是你看到的这篇,个人认为上一篇的文笔更好,毕竟当时精力正盛,但是两篇内容没有区别不影响阅读。