笔者介绍:姜雪伟,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++结构体的区别的更多相关文章

  1. C语言的结构体和C++结构体的区别

    关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...

  2. [C++] C/C++结构体的区别

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

  3. C++类和结构体的区别

    C++类和结构体的区别? 结构体默认数据访问控制是public; 类默认数据访问控制是private;

  4. C语言的结构体和 C++结构体的区别

     C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不 ...

  5. Swift - 类和结构体的区别

    类和结构体有许多相同之处,也有许多不同之处. 二者区别如下: 1,类可以继承和扩展,结构体不可以 2,可以让一个类的实例来反初始化,释放存储空间,结构体做不到 3,类的对象是引用类型,而结构体是值类型 ...

  6. C和C++结构体的区别

    C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数.所以C的结构体是没有构造函数.析构函数.和this指针的. C的结构体对内部成员变量的访问权限只能是public,而C++ ...

  7. C#中类和结构体的区别

    结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的(以下摘录): C#结构体和类的区别问题:在C#编程语言中,类属于引 ...

  8. 【c# 学习笔记】类与结构体的区别

    由于类与结构体在语法和使用上都非常类似,导致我们这些初学者容易混淆.为更好理解,特做以下区分记录: ① 语法上的区别在于,定义类要使用关键词class,而定义结构体则使用关键词struct. ② 结构 ...

  9. 2.5 C++类class和结构体struct区别

    参考:http://www.weixueyuan.net/view/6337.html 总结: 在C++中,struct类似于class,在其中既可以定义数据成员,又可以定义成员函数. 在C++中,s ...

随机推荐

  1. maven项目打WAR包记录

    打了个war包,各种不顺,也是以前没打过的原因,眼高手低了…… cmd 进入项目目录 打开 运行----cmd 进入命令窗口 键入 cd 回车 输入E\:mars\cdc 键入 mvn clean p ...

  2. ArcGIS COM Exception 0x80040228

    问题:  string shpDir = Path.GetDirectoryName(shpfile);             string shpfilename = Path.GetFileNa ...

  3. python进阶——进程/线程/协程

    1 python线程 python中Threading模块用于提供线程相关的操作,线程是应用程序中执行的最小单元. #!/usr/bin/env python # -*- coding:utf-8 - ...

  4. SSO 单点登录的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

  5. 关于Python字符编码encode和decode

    (注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 记得几天前,部门的一个小姑娘问我,怎么她Python打印出来的中文信息都乱码了?我走过去,略思一二,瞬间给她搞定,其实这是字 ...

  6. C#属性器Get和Set

    public sealed class classroom { private List<string> student = new List<string>(); priva ...

  7. 20145120黄玄曦《网络对抗》MSF基础应用

    20145120黄玄曦<网络对抗>MSF基础应用 准备工作 本来决定就是老师提供的XP虚拟机了,做着做着发现因为打补丁以及语言的问题,需要另外的虚拟机. 求来了不那么健壮的虚拟机,环境如下 ...

  8. Mac 使用技巧分享

    1. 快捷键开启speech功能: System Preferences -> Ditaction&Speech ->Text to Speech ->Select 'Spe ...

  9. xml的servlet配置

    内容如下 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="ht ...

  10. Pandas系列

    系列(Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组.轴标签统称为索引. pandas.Series Pandas系列可以使用以下构造函数创建 - p ...