搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
不正经
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Redis中的持久化操作:RDB和AOF_unable to obtain the aof file appendonly.aof.1.inc
2
ElementUI之表格组件
3
Windows安装Mac系统
4
c#定时备份mysql数据库_c#利用定时器自动备份数据库(mysql)
5
小型超市零售管理系统数据库设计_零售经营数据库
6
Java Arrays,Collections中addAll使用方法和初始化容器方法_java中collection的addall如何使用
7
TF-IDF算法学习报告
8
[职场] 找工作投简历怎么写 #微信#微信#知识分享
9
YOLOv5改进 | 注意力篇 | BiFormer双层路由注意力机制(Bi-level Routing Attention)_bi-level路由注意力
10
Opencv项目实战:09 物体尺寸测量_opencv测量物体尺寸
当前位置:
article
> 正文
明晰class和struct之间的区别_struct 与 class 区别
作者:不正经 | 2024-06-13 21:13:36
赞
踩
struct 与 class 区别
class与struct
c++最初被称为“c with class”,足见class在c++中的地位。在c++中我们可以用class自定义用户数据类型,然而它还存在一个类似的——struct,他们似乎有着太多的相同的特点与功能。
由于在设计c++时就考虑到要向下兼容c,所以c++中的很多东西都能在c中找到,要谈及struct就要从c谈起。
c中struct的定义如下:
struct 结构名
{
成员表
};
因为struct是一种数据类型,那么就肯定不能定义函数,所以在面向c的过程中,struct不能包含任何函数,如下所示:
struct A
{
int length;
int width;
};
如果出现下面的结构体定义,编译器将报错:
struct A
{
int length;
int width;
int GetSize()
{
return length*width;
};
};
面向过程的编程认为,数据和数据操作是分开的。然而当struct进入面向对象的c++时,其特性也有了新发展,就拿上面的错误函数来说,在c++中就能运行,因为在c++中认为数据和数据对象是一个整体,不应该分开,这就是struct在c和c++两个时代的差别。
写到这或许很多人就会有异或了:c++中的struct不就和class一样了?是的 ,他们用起来差别不大,主要差别有以下几点:
(1)关于使用大括号初始化
class和struct如果定义了构造函数,就不能用大括号进行初始化了;若没有定义,struct可以用大括号初始化,而class只有在所有成员变量全是public的情况下,才可以用大括号进行初始化。
#include
<iostream>
using
namespace
std
;
struct
SA
{
int
a
;
int
b
;
};
SA
data1
={2,3};
//
程序正确
struct
SB
{
int
a
;
int
b
;
SB
(
int
x
,
int
y
)
:
a
(
x
)
,
b
(
y
)
{}
~
SB
()
{}
};
SB
data2
={2,3};
//
程序错误
class
CA
{
public
:
int
a
;
int
b
;
};
CA
data3
={2,3};
//
正确
class
CB
{
public
:
int
a
;
int
b
;
CB
(
int
x
,
int
y
)
:
a
(
x
)
,
b
(
y
)
{}
~
CB
()
{}
};
CB
data4
={2,3};
//
错误
class
CC
{
public
:
CC
(
int
x
,
int
y
)
:
a
(
x
)
,
b
(
y
)
{}
~
CC
()
{}
private
:
int
a
;
int
b
;
};
CC
data5
={2,3};
//
错误
以上代码在vs2008下会提示
1>f:\
程序
\
继承和多态(初)
\
继承和多态(初)
\test.cpp(21) : error C2552:
“
data2
”
:
不能用初始值设定项列表初始化非聚合
1>f:\
程序
\
继承和多态(初)
\
继承和多态(初)
\test.cpp(41) : error C2552:
“
data4
”
:
不能用初始值设定项列表初始化非聚合
1>f:\
程序
\
继承和多态(初)
\
继承和多态(初)
\test.cpp(53) : error C2552:
“
data5
”
:
不能用初始值设定项列表初始化非聚合
关于 这种初始化的不同,在新的标准c++中已经不存在了,因为新标准制定了统一的初始化语法,代码如下:
//
类初始化
C
c
{0,0};
//
相当于
C++0x
中的:
C c(0,0);
//
数组初始化
int
*
a
=
new
int
[3] {1,2,3};
//
成员变量初始化
class
X
{
int
a
[4];
public
:
X
()
:
a
{1,2,3,4}
{}
};
//vector
容器初始化
vector
<
string
>
vs
={
"first"
,
"second"
,
"third"
};
//map
容器初始化
map
singers
=
{
{
"Lady Gaga"
,
"+1 (212) 555-7890"
},
{
"Mr Wang"
,
"+1 (212) 555-5678"
}
};
虽然大括号的初始化方式在新标准中得到统一,但是现在也仅仅是标准,在新标准执行之前这种不同仍然存在。
(2)关于默认权限访问
class中默认成员访问权限是private,而struct的默认访问权限是public,具体代码如下:
struct
SA
{
int
a
;
int
b
;
};
class
CA
{
int
a
;
int
b
;
};
SA
data1
={2,3};
CA
data2
={2,3};
cout
<<
data1
.
a
<<
data2
.
a
<<
endl
;
错误提示:
1>f:\
程序
\
继承和多态(初)
\
继承和多态(初)
\test.cpp(94) : error C2552:
“
data2
”
:
不能用初始值设定项列表初始化非聚合
(3)关于继承方式
class中默认继承方式是private,而struct的默认继承方式是public,具体代码如下:
struct
SA
{
int
a
;
int
b
;
};
struct
D1
:
SA
{
int
c
;
};
class
CA
{
public
:
int
a
;
int
b
;
};
class
D2
:
CA
{
public
:
int
c
;
};
D1
a
;
D2
b
;
cout
<<
a
.
a
<<
endl
;
cout
<<
b
.
a
<<
endl
;
虽然感觉struct是多余的,但考虑到“对c兼容”就将struct保留了下来,并做了一些扩展使其更适合面向对象,所以c++中的struct再也不是c中的那个了。
而两者最大的区别就在于思想上,c语言编程单位是函数,语句是程序的基本单元。而C++语言的编程单位是类。从c到c++的设计有过程设计为中心向以数据组织为中心转移。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/不正经/article/detail/714868
推荐阅读
article
【通义千问】
Qwen
从本地加载
分词器
报错‘‘
tokenizer
class
not
exist
‘‘的...
在尝试将模型文件从 [Hugging Face Model Hub](https://huggingface.co/Qw...
赞
踩
article
C++在结构(
Struct
)中使用
队列
(
Queue
)_
queue
种能存放
struct
吗...
C++在结构(
Struct
)中使用
队列
(
Queue
)_
queue
种能存放
struct
吗
queue
种能存放
struct
吗 ...
赞
踩
article
【
kafka
】
kafka
脚本
kafka
-
run
-
class
.sh 使用介绍
jmx
监控 查看jm...
1.概述转载:https://www.iteblog.com/archives/1605.htmlKafka内部提供了许...
赞
踩
article
AS错误:Duplicate
class
kotlin
.xxx.
jdk8
.DurationConve...
解决android studio出现的错误:Duplicate
class
kotlin
.text.
jdk8
.Regex...
赞
踩
article
Android
插件开发适配2022.3.1 Giraffe_could not
initialize
...
基本都是gradle
intellij
plugin的锅,可以关注下这个插件的issue更新下版本。_could not...
赞
踩
article
【论文&模型讲解】文本分类 Towards
Unified
Prompt
Tuning
for
Fe...
UPT (
Unified
Prompt
Tuning
)
few
-
shot
文本分类Towards
Unified
Pro...
赞
踩
article
LoRaW
A
N
协议-
Class
A
类
设备
分析_
lorawan
classa
...
目录1 前言2 接收窗口2.1 Receive_Delay1/Receive_Delay22.2 JOIN_
A
CCEPT...
赞
踩
article
鸿蒙
HarmonyOS
开发
框架—
ArkTS
语言
(基本语法 二)
_
鸿蒙
struct
...
在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由
开发
者定义的称为自定义组件。
_
鸿蒙
struct
...
赞
踩
article
C++
结构
体(
struct
)的
继承
_
struct
继承
...
C++
中的
struct
对C中的
struct
进行了扩充,它已经不再只是一个包含不同数据类型的数据
结构
了,它已经获取了太多的...
赞
踩
article
C++中的
结构
体
继承
结构
体_
c++
struct
继承
...
在C++中,
结构
体可以
继承
另一个
结构
体,就像类
继承
另一个类一样。这种
继承
被称为
结构
体
继承
。2023年8月5日,周六上午。...
赞
踩
article
C++
中的
struct
与
class
详解_
c++
struct
class
...
在
C++
中,
struct
和
class
都是用户定义类型(UDT)的关键字,用于封装数据和函数。尽管它们在许多方面都非常相似...
赞
踩
article
C++
之
继承
(
万字长文详解)
_
c++
struct
继承
...
C++
之
继承
详解
_
c++
struct
继承
c++
struct
继承
...
赞
踩
article
Golang
Struct
继承
匿名字段/内嵌
结构
体_
golang
unknown
field
继...
在
golang
中,采用匿名
结构
体字段来模拟
继承
关系。这个时候,可以说 Student 是
继承
自 Person .可以看到...
赞
踩
article
Golang
Struct
继承
的
深入讨论和细节_go
多个
struct
继承
...
(5)结构体嵌入两个(或
多个
)匿名结构体,如两个匿名结构体有相同
的
字段和方法(同时结构体本身没有同名
的
字段和方法),在访...
赞
踩
article
C++之
继承
_
c++
struct
继承
...
本文主要介绍了C++中面向对象三大特性之一的多态的相关概念,包含了单
继承
、多
继承
、菱形
继承
以及虚拟
继承
,最后比较了
继承
和...
赞
踩
article
结构
体
(
struct
)
继承
——[
C++
语言
中]_
结构
体
继承
...
在
C++
语言
中,
struct
对C
语言
中的strcut进行了扩充,已经不仅仅是一个包含不同数据类型的数据
结构
体
了,在
C++
...
赞
踩
article
笔记:C++
结构
体
继承
_
c++
struct
继承
...
笔记:C++
结构
体
继承
_
c++
struct
继承
c++
struct
继承
继承
就是一...
赞
踩
article
C++
中的
继承
_
c++
struct
继承
...
继承
(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上...
赞
踩
article
【
C++
】
继承
_
c++
struct
继承
...
目录1、
继承
的概念及定义1.1、
继承
的概念1.2、
继承
的定义定义格式
继承
关系和访问限定符
继承
基类成员访问方式的变化2、基...
赞
踩
article
C++
|
C++
数据结构
(
struct
)_
c++
struct
...
C++
|
C++
数据结构
C/
C++
数组允许定义可存储相同类型数据项的变量,但是结构是
C++
中另一种用户自定义的可...
赞
踩
相关标签
学习
笔记
人工智能
语言模型
深度学习
c++
算法
数据结构
kafka
kafka-run-class
jmx监控
查看jmx信息
kotlin
开发语言
android
android studio
nlp
few-shot
prompt
文本分类
lorawan
物联网
lora
harmonyos
华为