C与C++结构体的区别

原创 2017年06月04日 21:14:45

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

不论在面试中还是项目开发中,都会遇到C与C++混用的情况,面对这些我们就要对它们的区别非常熟悉,这样才能在项目中运用自如。在此也是给读者做一个总结,供参考。。。。。

在C ++中,struct和class是完全相同的,除了该struct默认为public 可见,class默认为private不可见。
C和C ++结构之间的一些重要区别:

  1. 结构内的成员函数:C中的结构不能在结构内部具有成员函数,但C ++中的结构可以与成员函数一起使用。
  2. 直接初始化:我们不能直接初始化C中的结构数据成员,但我们可以在C ++中实现。
首先给读者展示的是C语言代码:
// C program to demonstrate that direct
// member initialization is not possible in C
#include<stdio.h>
 
struct Record
{
   int x = 7;
};
 
// Driver Program
int main()
{
    struct Record s;
    printf("%d", s.x);
    return 0;
}
/* Output :  Compiler Error
   6:8: error: expected ':', ',', ';', '}' or 
  '__attribute__' before '=' token
  int x = 7;
        ^
  In function 'main': */

输出编译错误,因为在C语言中的成员不能赋初值。

再给读者展示C++中的代码展示:
// CPP program to initialize data member in c++
#include<iostream>
using namespace std;
 
struct Record
{
    int x = 7;
};
 
//  Driver Program
int main()
{
    Record s;
    cout << s.x << endl;
    return 0;
}
// Output
// 7

输出结果是7,编译正确。
3、使用struct关键字:在C中,我们需要使用struct声明一个struct变量。在C ++中,struct不是必需的。例如,让Record有一个结构。
在C中,我们必须对Record变量使用“struct Record”。在C ++中,我们不需要使用struct,只能使用'Record'。
4、静态成员: C结构不能有静态成员,但允许使用C ++。
C的案例代码如下所示:
// C program with structure static member
struct Record
{
    static int x;
};
 
// Driver program
int main()
{
    return 0;
}
/* 6:5: error: expected specifier-qualifier-list 
   before 'static'
     static int x;
     ^*/
编译错误,在C中的结构体中不能声明static静态变量。
再看看C++中的代码:
// C++ program with structure static member
 
struct Record
{
    static int x;
};
 
// Driver program
int main()
{
    return 0;
}

5、sizeof运算符:该运算符将为C中的空结构生成0,而在C ++中为空结构生成1
// C program to illustrate empty structure
#include<stdio.h>
 
//empty structure
struct Record
{
};
 
//Driver program 
int main()
{
    struct Record s;
    printf("%d\n",sizeof(s));
    return 0;
}

输出C:

0

C ++输出:

1
最后两条:
6、数据隐藏: C结构不允许数据隐藏的概念,但在C ++中允许,因为C ++是面向对象的语言,而C不是。
7、访问修饰符: C结构没有访问修饰符,因为这些修饰符不被语言支配。C ++结构可以具有这个概念,因为它在语言中是内置的。





版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

C与C++结构体的区别

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等...

C# 类与结构的区别

类与结构的区别 C++中结构与类的唯一区别是在于默认的访问级别,但是C#中的区别就稍微多了点,C#中如下 (1)类是引用类型,结构是值类型。 类中: public class Person {...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

C++-类与结构体的区别

归纳: 1.C++中struct可以包含构造函数、析构函数,可以继承、实现多态。 2.struct是数据结构的实现体,class是类的实现体。 3.struct的默认访问类型为public,cl...

C# 结构体与类的区别

经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字...

C++中结构体与类的区别

学习了C++的面向对象,最常见的和写的就是类结构体,下面主要介绍一下结构体和类的区别。 首先类是C++中面向对象独有的,但是C和C++中都有结构体,下面我们来看一下C和C++中结构体的区别。这里主要...

C# 结构体与类的区别

C#结构体和类的区别是什么呢?C#结构体和类的区别是如何表现的呢?本文就向你讲述这方面的内容。C#结构体和类的区别技术要点:◆类在传递的时候,传递的内容是位于托管内存中的位置,结构体在传递的时候,传递...

C结构体、C结构体 和 C++类的区别

from : http://hi.baidu.com/smallbigwang/item/137fff9785a82bb3cd80e58e 1.C的结构体和C++结构体的区别    1...

C结构体、C++结构体 和 C++类的区别

C结构体、C++结构体 和 C++类的区别 一、在C++中只有两点区别: (1)class中默认的成员访问权限是private的,而struct中则是public的。 (2)从class继承默认是...

C结构体、C++结构体和C++类的区别

1 、C结构体和C++结构体的区别
  • hjxzb
  • hjxzb
  • 2015-03-06 19:23
  • 657

C结构体、C++结构体 和 C++类的区别

C结构体、C++结构体基本相同,C++类主要是方法的实现。 结构体是数据类型的集合 类是数据类型加方法的集合,基本如此,更注重方法。 1.C的结构体和C++结构体的区别 (1) C的结构体内不允...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)