C与C++结构体的区别
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。
CSDN视频网址:http://edu.csdn.net/lecturer/144
不论在面试中还是项目开发中,都会遇到C与C++混用的情况,面对这些我们就要对它们的区别非常熟悉,这样才能在项目中运用自如。在此也是给读者做一个总结,供参考。。。。。
在C ++中,struct和class是完全相同的,除了该struct默认为public 可见,class默认为private不可见。
C和C ++结构之间的一些重要区别:
- 结构内的成员函数:C中的结构不能在结构内部具有成员函数,但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语言中的成员不能赋初值。
// 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,编译正确。
// 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++ 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
最后两条:
C与C++结构体的区别的更多相关文章
- C语言的结构体和C++结构体的区别
关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...
- [C++] C/C++结构体的区别
C/C++结构体的区别 >_<:C中的结构体和C++中结构体的不同之处: 在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. >_<: ...
- C++类和结构体的区别
C++类和结构体的区别? 结构体默认数据访问控制是public; 类默认数据访问控制是private;
- C语言的结构体和 C++结构体的区别
C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不 ...
- Swift - 类和结构体的区别
类和结构体有许多相同之处,也有许多不同之处. 二者区别如下: 1,类可以继承和扩展,结构体不可以 2,可以让一个类的实例来反初始化,释放存储空间,结构体做不到 3,类的对象是引用类型,而结构体是值类型 ...
- C和C++结构体的区别
C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数.所以C的结构体是没有构造函数.析构函数.和this指针的. C的结构体对内部成员变量的访问权限只能是public,而C++ ...
- C#中类和结构体的区别
结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的(以下摘录): C#结构体和类的区别问题:在C#编程语言中,类属于引 ...
- 【c# 学习笔记】类与结构体的区别
由于类与结构体在语法和使用上都非常类似,导致我们这些初学者容易混淆.为更好理解,特做以下区分记录: ① 语法上的区别在于,定义类要使用关键词class,而定义结构体则使用关键词struct. ② 结构 ...
- 2.5 C++类class和结构体struct区别
参考:http://www.weixueyuan.net/view/6337.html 总结: 在C++中,struct类似于class,在其中既可以定义数据成员,又可以定义成员函数. 在C++中,s ...
随机推荐
- 本地连不上远程mysql数据库(1)
Ubuntu 16.04下开启Mysql 3306端口远程访问 0. 前言 网上看到很多开启Mysql远程访问端口,修改的配置文件我都没有找到. 特意查看了我的Linux版本 $ sudo lsb ...
- MySQL SQL Injection(注入)
如果通过网页接收用户输入,而后再把这些数据插入到数据库中,那么你可能就会碰到 SQL 注入式攻击.本节简要介绍如何防范这种攻击,确保脚本和 MySQL 语句的安全性. 注入式攻击往往发生在要求用户输入 ...
- 关于comparable接口
参考博客: https://blog.csdn.net/nvd11/article/details/27393445 第一个例子 @Test public void fun1(){ List list ...
- Spring_使用 JdbcTemplate和JdbcDaoSupport-代码
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?><beans xml ...
- 搭建maven项目步骤
整体项目结构如下: 第一步 第二步 第三步:删除src目录,只留pom文件 第四步: 第五步: 6 7 8 9 10 11 12
- nginx上布置thinkphp
thinkphp config配置: ', //URL模式 nginx rewrite配置: location / { set $static 0; if ($uri ~ ...
- Java内存分析1 - 从两个程序说起
这次看一些关于JVM内存分析的内容. 两个程序 程序一 首先来看两个程序,这里是程序一:JVMStackTest,看下代码: package com.zhyea.robin.jvm; public c ...
- define用于条件编译
格式: #ifndef _test.h_ //这里放不想被重复包含的代码 #define _test.h_ #endif define用于条件编译的意思是不想让头文件重复编译,头文件重复编译会造成的结 ...
- windows8.1下安装Cygwin并通过apt-cyg安装软件包
参考 http://yuanshuilee.blog.163.com/blog/static/2176972752014126786185/ http://www.cnblogs.com/zhang- ...
- mysql数据库优化课程---10、mysql数据库分组聚合
mysql数据库优化课程---10.mysql数据库分组聚合 一.总结 一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from ...