c、c++、c# 结构体与类的区别

C, C++,C#区别联系 开始学C#了,但一直很好奇C#C++,还有C的关系,因为他们在名字上真的是很像的,所以他们之间一定有某种神秘的关系对不对?哈哈,我查了些资料,但是也是五花八门,仁者见仁智者见智,综合了一下,写了篇总结,分享给大家,如有错误欢迎大神斧正。 一、三者关系:继承关系是C>C++>C#     C++完全向C兼容,C程序几乎不用修改即可在C++的编译器上运行.C++也称为带的C,在C的基础 阅读详情

 

1. C与C++中结构体的比较

C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数。

C++中的结构体和类的异同:

一、相同之处:结构体中可以包含函数;也可以定义public、private、protected数据成员;定义了结构体之后,可以用结构体名来创建对象。但C中的结构体不允许有函数;

              也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数。

二、不同之处:结构体定义中默认情况下的成员是public,而类定义中的默认情况下的成员是private的。

实际上,C中的结构体只涉及到数据结构,而不涉及到算法,也就是说在C中数据结构和算法是分离的,而到C++中一类或者一个结构体可以包含函数(这个函数在C++我们通常中称为成员函数),C++中的结构体和类体现了数据结构和算法的结合。

例如:

struct CHGROUP

{

        unsigned short LOOPNum;

        unsigned short SPKMICNum;

        unsigned short MONITORNum;

        unsigned short TBNum;

        unsigned short AGENTNum;

        unsigned short HBNum;

        unsigned short VOIPNum;

private:

        CH *pLOOP;

        CH *pSPKMIC;

        CH *pMONITOR;

        CH *pTB;

        CH *pAGENT;

        CH *pVOIP;

        CH *pHB;

public:

        CHGROUP()

        {

                LOOPNum = SPKMICNum = MONITORNum = TBNum = AGENTNum = HBNum = VOIPNum = 0;

                pLOOP = pSPKMIC = pMONITOR = pTB = pAGENT = pHB = pVOIP = 0;

        }

 

        virtual ~CHGROUP()

        {

                if(LOOPNum) delete[]pLOOP;

                if(SPKMICNum) delete[]pSPKMIC;

                if(MONITORNum) delete[]pMONITOR;

                if(TBNum) delete[]pTB;

                if(AGENTNum) delete[]pAGENT;

                if(HBNum) delete[]pHB;

                if(VOIPNum) delete[]pVOIP;

        }

        void init(unsigned int type, unsigned int num)

        {

                if(num == 0)

                        return;

 

                CH *p = new CH[num];

 

                if(p==NULL)

                        return;

                switch(type)

                {

                case CHTYPE_LOOP:

                        pLOOP = p;

                        LOOPNum = num;

                        break;

                case CHTYPE_SPKMIC:

                        pSPKMIC = p;

                        SPKMICNum = num;

                        break;

                case CHTYPE_MONITOR:

                        pMONITOR = p;

                        MONITORNum = num;

                        break;

                case CHTYPE_TB:

                        pTB = p;

                        TBNum = num;

                        break;

                case CHTYPE_AGENT:

                        pAGENT = p;

                        AGENTNum = num;

                        break;

                case CHTYPE_HB:

                        pHB = p;

                        HBNum = num;

                        break;

                case CHTYPE_VOIP:

                        pVOIP = p;

                        VOIPNum = num;

                        break;

                default:

                        delete []p;

                        return;

                }

        }

 

上边是一个结构体,然后可以定义了struct CHGROUP chs;

调用函数来初始化

chs.init(CHTYPE_AGENT, num);

 

在C++中只有两点区别:  
  (1)class中默认的成员访问权限是private的,而struct中则是public的。  
  (2)从class继承默认是private继承,而从struct继承默认是public继承。  
  除此这外无任何区别。

 

2.C# 结构体与类的区别

c#中的结构体类型

struct 类型是一种值类型,通常用来封装小型相关变量组,例如,矩形的坐标或库存商品的特征。下面的示例显示了一个简单的结构声明。

public struct PostalAddress
{
// Fields, properties, methods and events go here...
}

结构与类共享几乎所有相同的语法,但结构比类受到的限制更多:

尽管结构的静态字段可以初始化,结构实例字段声明还是不能使用初始值设定项。

结构不能声明默认构造函数(没有参数的构造函数)或析构函数。

结构的副本由编译器自动创建和销毁,因此不需要使用默认构造函数和析构函数。实际上,编译器通过为所有字段赋予默认值(参见默认值表)来实现默认构造函数。结构不能从类或其他结构继承。

结构是值类型 -- 如果从结构创建一个对象并将该对象赋给某个变量,变量则包含结构的全部值。复制包含结构的变量时,将复制所有数据,对新副本所做的任何修改都不会改变旧副本的数据。由于结构不使用引用,因此结构没有标识 -- 具有相同数据的两个值类型实例是无法区分的。C# 中的所有值类型本质上都继承自 ValueType,后者继承自 Object。

编译器可以在一个称为装箱的过程中将值类型转换为引用类型。

结构具有以下特点:

结构是值类型,而类是引用类型

向方法传递结构时.结构是通过传值方式传递的,不是作为引用方式传递.

与类不同,结构的实例化可以不使用new运算符.

结构可以声明构造函数,但他们必须带参数

一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。

结构可以实现接口。

在结构中初始化实例字段是错误的。

 

一文看尽C、C++C#的联系区别(改变世界的第一步) 阅读详情

相关推荐

c++,c.c#区别

C++则一般看作是对C语言的扩展。 Java语言是一种完全的面向对象语言,虽然它的底层(运行时库)是用C语言开发的,可是并不依赖于C。 C#是微软开发的一种编程语言,语法似Java,几乎就是从Java的翻版。 C/C++的优点在于底层比较接近,可以控制的粒度更加精细,是开发系统级应用的最佳选择。关于缺点,我想正是源于其优点,因为它们能控制的编程元素粒度精细,所以编程比较困难,烦琐,容易出错。 ...

歌谣的博客 5351

C++C# 结构体用法比较

一、C++结构体用法 1、结构体结构体用来存放若干不同型(也可以是相同型)的数据项。 2、结构体型的格式 struct 结构体型名 { 型名 成员名; }; 如: struct Student { int num; char name[20]; int age; float score; char addr[30]; }...

灰太狼的小秘密 2705

2026年职业院校技能大赛中职移动应用开发模块二10套题库开发培训视频(全套)

2026年职业院校技能大赛中职移动应用开发模块二10套题库开发培训视频(全套)

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 260

C++-C语言结构体C++的有什么区别

C语言结构体成员变量默认是公共的,而C++结构体支持三种访问权限:public、privateprotected。可以通过这些关键字来控制成员变量的访问权限。:C语言结构体只能包含成员变量,不支持定义成员方法。而在C++结构体可以像一样定义成员方法。:C语言结构体没有构造函数析构函数的概念,而C++结构体可以像一样定义构造函数析构函数。:C语言中的结构体不支持继承多态特性,而C++结构体可以通过继承来实现代码的重用多态。总之,C++结构体比C语言结构体更加灵活强大,

MoOtA 701

C#C++区别

C#是三大主流OOP(面向对象编程)语言(C++,Java,C#)之一,也是最新的一种,其中必然借鉴了前两者的长处,“否则它的缔造者就该打屁股”——候捷语,见《C#Primer中文版》的译续:-)它们三者有太多的共性,其语法编程概念,绝大部分彼此兼容,精一而通三。尤其对熟练掌握C++的程序员而言,学习JavaC#没有任何难度,唯一需要花些时间的地方就是熟悉这二者的库。 三者中,C++是我最...

weixin_34096182的博客 899

C结构C++结构体之间的区别

C结构C++结构体之间的区别

Serven的博客 1万+

C语言C++语言结构体区别

(1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数this指针的。(2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public、protected、private三种。(3)C的结构体是不可以继承的,C++结构体是可以从其他的结构体或者继承过来的.(4)在C中定义结构体型用typedef,如下:...

qq_21114325的博客 1157

[零散知识点] 编程范式 | C、C++C#区别 | 结构体

当一个的成员是另一个的对象时,先按成员声明的顺序逐个调用构造函数,再调用自身的构造函数(因为自身的构造函数可能会用到成员对象)。属于面向过程的编程语言,提供了对内存或硬件的直接操作,语法简单,没有C++中的高级抽象特性,其标准库libc很小,仅包含基本的函数,所以对比其他语言开销更少,运行效率更高。在继承关系中,顺序是这样的:基的构造函数——派生的构造函数——派生的析构函数——基的析构函数。想想砍树,基是树根,派生是树干。的默认访问权限是私有的,默认的继承方式也是私有的。

2302_79769914的博客 1096

过程导向奖励驱动的多模态搜索智能体:从Sim-to-Real跨越到自动化实践

在人工智能领域,强化学习通过智能体环境的交互来学习最优策略,是解决序列决策问题的核心技术。其核心原理在于利用奖励信号来引导智能体的行为,但传统方法常受限于奖励稀疏问题,导致学习效率低下。为解决此瓶颈,过程导向奖励机制应运而生,它将稀疏的最终奖励拆解为密集的中间子目标奖励,极大地提升了训练效率智能体的可解释性。这一技术的核心价值在于,它显著增强了智能体在复杂、动态环境中的适应性泛化能力,为实现从模拟环境到真实场景的平滑迁移(Sim-to-Real)提供了关键路径。其应用场景广泛,从软件测试自动化、智能流

weixin_34110749的博客 438

C++自学笔记7(classstruct

是什么?结构体是什么?两者区别是什么?

weixin_64418869的博客 638

C,C++C#,Java?这些有什么区别

c,c++c#,java?这些有什么区别?   C语言: 目前最著名、最有影响、应用最广泛的windows、linuxUNIX三个操作系统都是用C语言编写的。0S是计算机系统(由软硬件两个子系统构成)的核心灵魂,它是软件中最庞大最复杂的系统软件。既然如此庞大复杂的0S都可以用c语言编写,从狭义而言,还有什么系统软件应用软件不能用c语言编写呢?由此可以肯定的说,c语言是一门

张小洛的BOLG 3万+

三个故事带你快速理解C、C++C#区别

案例一: 任务:把大象放到冰箱里。 C: C语言是一个极其高冷的人,因此回答都是冷冷的: 我:你好C语言,我想把大象放到冰箱里,帮我做好不好? C:好 我:那我们要怎么做呢? C:猜 我:额。。。是不是应该先创造一只大象? C:是 我:怎么创造呢? C:猜 我只好去翻了一下文档,哦,malloc一块内存啊。 我:好的,我用malloc,申请一块空间放大象好...

小白的逆袭 3万+

C、C++C#区别

本文对比分析了C语言家族的三大成员(C、C++C#)的核心差异。从设计目标看,C侧重底层控制(1972),C++(1983)强调多范式编程,C#(2000)专注开发效率。语法特性上,C为过程式,C++支持面向对象模板,C#强制面向对象且内置垃圾回收。内存管理方面,C/C++需手动管理,C#由CLR自动处理。编译运行环境差异显著:C/C++直接生成机器码,C#通过JIT转换为中间语言。性能上C/C++更优,而C#开发效率更高。标准库方面,C最基础,C++扩展STL,C#的.NET库最丰富。三者各有所长,

colin_128988的博客 1407

C、C++C#区别概述

C、C++ C# 是三种不同的编程语言,它们在设计目标特性应用领域上有很大的区别。编程范式:C 是一门过程式编程语言,主要关注过程函数的编写。C++ 是一门多范式编程语言,支持过程式编程面向对象编程。它引入了对象的概念,允许使用封装、继承多态等面向对象的特性。C# 是一门多范式编程语言,主要面向对象,同时也支持过程式泛型编程。它设计用于.NET框架交互,支持面向组件编程。内存管理:在 C 中,开发者需要手动管理内存,包括分配释放内存。C++ 提供了自动内存管理的功能。

H931053的博客 6959

C 语言 C++C#区别

今天突然好奇C、C++C#这三门语言都有个C,那么它们之间到底有什么关联呢。所以就去Google了,找到了这篇文章:Understanding the Differences Between C#, C++, and C - C# Station。看完感觉写得挺好的,就打算翻译出来。 需要注意的是,本人技术十分有限,因此翻译的准确性可能有待商榷,建议有英语基础的同学,可直接阅读源站。 开始 如果你是一个有志向的程序员,那么你可能会很难决定先学哪门编程语言。世界上有相当多的编程语言,但是在C、C++

欢迎关注,共同进步! 5923

阐述C、C++C#区别

一、关于C语言 C语言是一种结构化编程语言。它层次清晰,便于按模块化方式组织程序,易于调试维护。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。   C语言的表现能力处理能力极强。它不仅具有丰富的运算符数据型,便于实现各复杂的数据结 构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。   由于C语言实现了对硬件的编程操作,因此C语言集高级语言低级语言的功能于一体。既 可用于系统软件的开发,也适合于应用软件的

zq9955的博客 1万+

C、C++C#区别联系

C、C++C#是三种具有继承关系的编程语言。C语言作为底层基础,强调硬件控制结构化编程;C++在保留C特性的同时增加了面向对象泛型编程;C#则基于.NET框架,采用完全面向对象自动内存管理。三者语法相似但设计理念不同:C直接操作硬件,C++平衡性能抽象,C#侧重开发效率。应用场景上,C多用于系统开发,C++适合高性能应用,C#则广泛应用于企业级软件。它们共同构成了从底层到高层的完整技术栈,开发者需根据项目需求选择合适的语言

LZYself的博客 4533

C 语言 C++C#区别在什么地方?

来源:知乎 其实吧,个人感觉就是: 任务:把大象放到冰箱里。 C: C语言是一个极其高冷的人,因此回答都是冷冷的: 我:你好C语言,我想把大象放到冰箱里,帮我做好不好? C:好 我:那我们要怎么做呢? C:猜 我:额。。。是不是应该先创造一只大象? C:是 我:怎么创造呢? C:猜 我只好去翻了一下文档,哦,malloc一块内存啊。 我:好的,我用malloc,申...

小白的逆袭 9832

【通信原理】基于【MATLAB】的通信OFDM系统仿真

主要进行OFDM系统的仿真,使用MATLAB软件对OFDM系统的接收端发射端分别进行模拟仿真。

ALi.S的博客 5771

智能交换机配置程序ssc3.6

管理tp-link交换机软件,可以设置每一个端口,并初始化。

上一篇: new, delete, malloc,free用法心得
下一篇: C++中struct 和 class的区别
fmantianpiaolan
博客等级 码龄17年 3粉丝 7原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值