,,C++结构体struct和类class区别详解

,,C++结构体struct和类class区别详解

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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: