问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...到底是什么?我在网上查到的是:除了他们的默认访问权限不一样_百度知...

发布网友 发布时间:2024-10-22 02:17

我来回答

1个回答

热心网友 时间:2024-10-26 06:20

从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:

  (一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;

  (二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。

  除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。

  不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:

  (1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;

  (2)都可以有一大堆public/private/protected修饰符在里边;

  (3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:A a = {1, 2, 3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。

  (4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。

  (5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。

  (6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。
最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。

  如果没有多态和虚拟继承,在C++中,struct和class的存取效率完全相同!简单的说就是,存取class的data member和非virtual function效率和struct完全相同!不管该data member是定义在基类还是派生类的。

  如果不是为了和C兼容,C++中就不会有struct关键字。因此建议是:如果不需要与C兼容或传递参数给C程序,不要在C++中用struct。

  注意class的data member在内存中的布局可不一定是data member的申明次序。C++只保证处于同一个access section的data member按照申明次序排列。

  struct所体现的是一种数据结构,而class则是体现OOP思想中的"封装"的特性~~~

  还有一个区别:struct可以用{}赋初值,而class不行

  比如声明如下:

  struct abc{ int m1; float m2; bool m3; }

  可以这么构造对象:

  abc abcInstance{ 1, 1.0f, false };

  struct:属性

  class:属性+行为

  注意:在VC6里,class可以与模板关键字typename互换,但是struct好像就不可以,编译好像通不过。对这个问题,我专门查了一些资料,发现网上确实有说 struct不能用于模板关键字而class可以,这似乎应该是他们的一个不同了。然而,我又看了一下 《深度探索C++对象模型》,在书的前几章(好像就是第一章)Lippman说:本来他的编译器是不支持将struct作为模板关键字的,但后来改变了,也就是说struct 和class除了默认的访问属性外,其他场合下真正的完全一样了。对此,我认为这个按理说是这样的,但不同的编译器可能会有自己的处理,就像VC6那样。

  class中有方法,

  struct中没有.

  class是一个扩展的struct

  array(类型一样)->struct(类型可以不一致)->class(添加方法)

  虽然两者都可以捆绑行为。

  但是,理解不一样。

  struct,就是对程序员全局可见的数据与方法。简化数据逻辑结构的设计。可以说是一种自定义的数据结构。

  而class,则是将数据与方法封装,即让行为与数据一致。则是一种编程方法。即客观世界在代码世界中的体现。体现的是一种编程思想。

  在C里面:struct不能包含函数,而class可以。

  在C++里面:都可以有函数,默认情况下struct中变量是public,而class中是private

  有一点不明白,class支持的继承和多态,struct也支持??

  class在赋值运算符右边出现需要有定义的拷贝构造函数,而struct是默认的位拷贝.

  但是一般从兼容C的角度考虑,struct里面只包含数据成员而不包含成员函数,这只是一个编程习惯问题。

热心网友 时间:2024-10-26 06:24

从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:

  (一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;

  (二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。

  除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。

  不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:

  (1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;

  (2)都可以有一大堆public/private/protected修饰符在里边;

  (3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:A a = {1, 2, 3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。

  (4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。

  (5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。

  (6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。
最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。

  如果没有多态和虚拟继承,在C++中,struct和class的存取效率完全相同!简单的说就是,存取class的data member和非virtual function效率和struct完全相同!不管该data member是定义在基类还是派生类的。

  如果不是为了和C兼容,C++中就不会有struct关键字。因此建议是:如果不需要与C兼容或传递参数给C程序,不要在C++中用struct。

  注意class的data member在内存中的布局可不一定是data member的申明次序。C++只保证处于同一个access section的data member按照申明次序排列。

  struct所体现的是一种数据结构,而class则是体现OOP思想中的"封装"的特性~~~

  还有一个区别:struct可以用{}赋初值,而class不行

  比如声明如下:

  struct abc{ int m1; float m2; bool m3; }

  可以这么构造对象:

  abc abcInstance{ 1, 1.0f, false };

  struct:属性

  class:属性+行为

  注意:在VC6里,class可以与模板关键字typename互换,但是struct好像就不可以,编译好像通不过。对这个问题,我专门查了一些资料,发现网上确实有说 struct不能用于模板关键字而class可以,这似乎应该是他们的一个不同了。然而,我又看了一下 《深度探索C++对象模型》,在书的前几章(好像就是第一章)Lippman说:本来他的编译器是不支持将struct作为模板关键字的,但后来改变了,也就是说struct 和class除了默认的访问属性外,其他场合下真正的完全一样了。对此,我认为这个按理说是这样的,但不同的编译器可能会有自己的处理,就像VC6那样。

  class中有方法,

  struct中没有.

  class是一个扩展的struct

  array(类型一样)->struct(类型可以不一致)->class(添加方法)

  虽然两者都可以捆绑行为。

  但是,理解不一样。

  struct,就是对程序员全局可见的数据与方法。简化数据逻辑结构的设计。可以说是一种自定义的数据结构。

  而class,则是将数据与方法封装,即让行为与数据一致。则是一种编程方法。即客观世界在代码世界中的体现。体现的是一种编程思想。

  在C里面:struct不能包含函数,而class可以。

  在C++里面:都可以有函数,默认情况下struct中变量是public,而class中是private

  有一点不明白,class支持的继承和多态,struct也支持??

  class在赋值运算符右边出现需要有定义的拷贝构造函数,而struct是默认的位拷贝.

  但是一般从兼容C的角度考虑,struct里面只包含数据成员而不包含成员函数,这只是一个编程习惯问题。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
福如东海终身寿险(A款)(分红型)能退多少钱 我买的新华人寿保险福如东海A型,但是想退了。 杭州樱花日语学校的学习效果如何得到管理与跟踪? 枣子不能与什么一起吃 枣子和什么食物相克 枣子和什么相克 枣子跟什么不能一起吃 电风扇带不动风叶拿掉风叶能转是怎么回事 嵌入式学习首先要学什么基础 学习嵌入式的基础是什么 c++访问声明的问题,求教 后脑勺左下方一阵阵疼怎么回事 后脑勺左下方按压疼是什么病造成的 ...竟然整个车厢没有医药箱!如此应急预案。开空调竟然没冷气!什么破 ... 二战时期山本五十六为什么要奇袭珍珠港啊!对日本有什么好处啊!!_百度... 山本深知美国海军的实力和强大的综合国力,为何还要袭击夏威夷,想拔除... 后脑勺痛什么原因引起的 ...是啥原因?我脖子疼而且后脑勺下方两个窝窝疼的厉害还头疼... 均码和m码哪个大 后脑勺靠下疼是怎么回事 亲,很多朋友说吃了马百良的产品,身体越来越好了,真的假的呀 ? 后脑勺右下方疼什么原因 后脑勺右下方阵阵疼痛怎么办 万物是有颜色的吗?人眼中的世界为何是有颜色的?人眼中的世界和狗眼中... 混凝土灌注桩注浆管规范要求 MyEclipse总是不停的跳出 web browser 就是后面显示的无法显示项_百度... myeclipse 中的 web browser 老是运行不出来 不读取文件 是哪出了错误... ...上敲的代码,为什么用eclipse2018就会有一个感叹号??? 为什么我把别人的项目导入之后会出现一个红色的感叹号,并且后来首页... 减肥的人能吃蜂蜜吗 肝炎病毒在多少常温下能存活? 乙型肝炎病毒基本概述 90度能使肝炎病毒失去活性吗 请问太阳能电池板是怎样将光能转换成电能的... 后脑勺底下疼怎么回事 后脑勺下方阵阵疼痛怎么回事 台湾一高中生为赚36万把好友卖去柬埔寨!这位高中生需承担哪些责任? 哪里63 999 285 1185 怀疑是国际诈骗。。 凌渡定速巡航怎么使用 凌渡定速巡航在哪 上汽大众凌渡巡航定速怎么设置 一个女生总是故意气我和让我郁闷是为什么? 杂体诗 谢法曹惠连赠别(江淹)拼音版、注音及读音 什么狐狸说什么请把句子补充完整 大家帮忙看下我这4G记忆棒是什么速度的... 三年合同到期不续签赔几个 PSP 4G的记忆棒这个算不算高速??? 4g棒子插路由器有什么用 跪求 区瑞强《无尽的爱》(神话的主题曲)的歌词! 关于4G红棒的测速结果,请问怎么看显示的数据? PSP-怎样区分4G记忆棒是否为高速棒