struct和class有什么区别?最本质的区别是默认的访问控制:默认的继承访问权限,struct是public,class是private。
一直没时间更新这一系列的文章,因为一直在忙毕业论文的开题和论文的提交。学弟看了上一篇关于雾中风景的文章,希望我继续写这一系列文章。坦白说,C的特性很多,这不是一篇教学指南的文章。我将挑选一些C学习过程中值得探讨的问题和大家聊一聊,以便提供一些有价值的建议。好了,今天就上点开胃菜,和大家聊聊struct和class关键字。
1.struct关键字:
C语言作为C语言的超集,兼容C语言的所有语法规则。c语言是我学的第一门编程语言,自然熟悉它的语法规则。在C语言中,我们可以使用struct关键字组合基本数据类型,实现图形、树等许多高级数据结构。
让我们简单回顾一下C语言中struct的用法:
strut node {//定义一个树节点。
int val
结构节点* left
结构节点*右;
};
intmain() {
结构节点根={2,NULL,NULL}。//可以用{a,b,c}直接赋值
cout root.val endl
返回0;
}
我们用一个非常简单的代码用C语言定义了树的数据结构。显然,使用struct Node作为类型定义是非常冗长的,此时我们可以抽出友typedef。
typedef结构{
int val
结构节点* left
结构节点*右;
}节点;
intmain() {
节点根={2,NULL,NULL}。//可以直接用Node定义类型。
cout root.val endl
返回0;
}
嗯,这个用法很简单。刚学C的时候,我天真的以为这是struct的用法。但我们不要忘记,C是一种面向对象的语言,C的设计者利用了struct关键字来修饰它。所以我在学习C异常处理的部分,看到了这段代码。
struct MyException:公共异常{
const char * what () constthrow () {
返回“C异常”;
}
};
struct定义的结构作为类使用,也可以继承和包含函数。没错,C中的struct关键字不再是C语言中的吴夏萌,而是和class关键字有着几乎相同的作用。唯一的区别是:
struct关键字实现的类、属性和函数的默认访问权限是public。
class关键字实现的类、属性、函数的默认访问权限是私有的。
所以如果上面的代码需要将关键字从struct改为class,那么需要更改的内容也很简单,就是显式添加public的访问权限:
类MyException:公共异常{
公共:
const char * what () constthrow () {
返回“C异常”;
}
};
2.非C语言程序员的想法:
以上struct和class的区别是另一个很好的面试话题,但是?我不喜欢这个设计。显然,在任何情况下明确指出访问权限都是一个好的编码习惯。使用语言本身的规则来控制访问并不是一个非常聪明的方法。
戈朗
只有一种方法来定义类,如下所示:
类型TreeNode结构{
Val int
左侧*TreeNode
右*TreeNode
}
访问控制取决于首字母的大小写,没有多余的洞。
计算机编程语言
只有一种方法来定义类,如下所示:
类TreeNode:
def__init__(self,x):
self.val=x
self.left=self.right=无
Python没有访问控制。
Java 语言(一种计算机语言,尤用于创建网站)
JAVA有很多类,枚举类,匿名类,接口等关键字。但是没有办法通过定义类关键字来改变访问控制属性。
斯卡拉
类似JAVA,静态类的功能被伴生对象代替。总的来说,差不多。访问控制更加灵活和严格。
3.小结:
JAVA之父曾经说过:我把运算符重载作为个人选择留了下来,因为我已经看到太多人在c中滥用它了。
到目前为止,Java还不支持运算符重载。(语法糖果写的是一时,但是滥用之后会带来很多团队合作的问题)
所以今天这篇文章表达我个人的看法。c里面有太多复杂的特性,很多时候我们可能会因为一时的方便而使用一些非常不好的特性。Struct应该是一个简单的结构,就像文本内容一样,如果我们想使用类,我们仍然应该选择class关键字。至于访问权限,用四个字明确规定。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。