先来说说C和C++中结构体的不同
a) C语言中的结构体不能为空,否则会报错
1>d:\myproject\visual studio 2013\projects\myc++\main.c(71): error C2016: C 要求一个结构或联合至少有一个成员
b) C语言中的结构体只涉及到数据结构,而不涉及到算法,也就是说在C中数据结构和算法是分离的。换句话说就是C语言中的结构体只能定义成员变量,但是不能定义成员函数。然而在C++中既可以定义成员变量又可以定义成员函数, C++中的结构体和类体现了数据结构和算法的结合。
不过虽然C语言的结构体中不能定义成员函数,但是却可以定义函数指针,不过函数指针本质上不是函数而是指针,所以总的来说C语言中的结构体只是一个复杂数据类型 ,只能定义成员变量,不能定义成员函数,不能用于面向对象编程。来看一个函数指针的例子:
  1. int My_Add(int a, int b)
  2. {
  3. return a + b;
  4. }
  5. int My_Sub(int a, int b)
  6. {
  7. return a - b;
  8. }
  9. struct  CTest
  10. {
  11. int(*Add)(int, int); //函数指针
  12. int(*Sub)(int, int);
  13. };
  14. int main()
  15. {
  16. struct CTest test;
  17. int ret = 0;
  18. test.Add = My_Add;
  19. test.Sub = My_Sub;
  20. ret = test.Add(3, 5);
  21. printf("%d", ret);
  22. }

c) 比如说这个结构体吧:

  1. struct  CTest
  2. {
  3. char ch;
  4. int num;
  5. };
  6. int main()
  7. {
  8. CTest test;
  9. test.num = 1;
  10. printf("%d", test.num);
  11. }
这样在C语言中是编译不过去的,原因提示未定义标识符CTest。总的来说就是在C语言中结构体变量定义的时候,若为struct 结构体名 变量名定义的时候,struct不能省略。但是在C++之中则可以省略struct。
 
再来分析C++中的结构体与类的区别:
先来说说C++中两者的相同之处: 结构体中也可以包含函数;也可以定义public、private、protected数据成员;定义了结构体之后,可以用结构体名来创建对象。也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数。总的一句话:class和struct的语法基本相同,从声明到使用,都很相似,但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
 
再来说说两者的区别:对于成员访问权限以及继承方式,class中默认的是private,而struct中则是public。class还可以用于表示模板类型,struct则不行。
注意struct是可以继承与被继承的,这一点有的人可能忽略了,来看一下struct中的继承与被继承:
  1. struct A
  2. {
  3. public:
  4. A(){};
  5. virtual void Dynamic()
  6. {
  7. cout << "A" << endl;
  8. }
  9. protected:
  10. void fun();
  11. private:
  12. int m_Data;
  13. };
  14. struct B:public A
  15. {
  16. public:
  17. virtual void Dynamic()
  18. {
  19. cout << "B" << endl;
  20. }
  21. };
  22. int main()
  23. {
  24. A * pa = new B;
  25. pa->Dynamic();
  26. }
编译完全没有问题。
 
总结一下就是:
概念:class和struct的语法基本相同,从声明到使用,都很相似,但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
 

C C++ 中结构体与类的更多相关文章

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

    结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的 C#结构体和类的区别问题:这两种数据类型的本质区别主要是各自指向的 ...

  2. C++中 结构体和类的异同

    在C++中,结构体是一种特殊形态的类. 结构体和类的唯一区别就是:  结构体和类具有不同的默认访问控制属性. 类中,对于未指定访问控制属性的成员,其访问控制属性为私有类型(private) 结构体中, ...

  3. C#中结构体与类的区别

    一.结构体和类非常相似 1,定义和使用非常相似,例子如下:public struct Student{    string Name;    int Age;}public class Questio ...

  4. C++中结构体与类的区别 2

    这里有两种情况下的区别.(1)C的struct与C++的class的区别.(2)C++中的struct和class的区别.在第一种情况下,struct与class有着非常明显的区别.C是一种过程化的语 ...

  5. C++中结构体与类的区别(结构不能被继承,默认是public,在堆栈中创建,是值类型,而类是引用类型)good

    结构是一种用关键字struct声明的自定义数据类型.与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,结构是值类型. 1.结构的构造函数和类的构造函数不同. a. ...

  6. C++中结构体与类的区别(struct与class的区别)

    转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据 ...

  7. C++中结构体与类的区别 1

    转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据 ...

  8. 10 结构体和类 - —— 《Swift3.0 从入门到出家》

    Swift中的面向对象5个要素:枚举.结构体.类.协议.扩展 面向对象研究的是对象,完成一件事情需要多个对象参与,是生活的映射 Swift中结构体和类非常相似,也就是结构体能完成类的所有功能.结构体是 ...

  9. iOS Swift结构体与类的方法调度

    前言 hello,小伙伴们:在忙碌中闲暇之余给大家聊聊swift的知识点,今天给大家带来的是swift中结构体与类的方法调度详细区别,希望对你有所帮助,好了废话不用多说,接下来步入主题! 1.普通方法 ...

随机推荐

  1. Process Monitor V2.96 (系统监视工具) 汉化免费绿色版

    软件名称: Process Monitor V2.96 (系统监视工具) 汉化免费绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP ...

  2. WPF Image Binding Uri Source 失败解决办法

    在ListView 的ListItem里动态绑定Image. 首先代码写的是没有问题的.但最后运行却无法显示图片.先看代码: 1. XAML部分 代码如下: <ListView x:Name=& ...

  3. 常用Git命令大全

    Git命令 查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show ...

  4. 解决gstreamer无法播放的bug

    0 ls 1 ./start.sh 2 ps 3 kill 366 4 cd /usr/app/services/ 5 ./start.sh 6 cd ../ 7 ls 8 cd res/ 9 ls ...

  5. mac上搭建python+selenium2的环境

    1.mac默认已安装有python和easy_install 2.进入终端,使用root的权限,然后输入,回车后需要root的密码,即可安装成功,成功结果如下所示 sudo easy_install ...

  6. net之session漫谈及分布式session解决方案

    最近一直在纠结net下分布式会话的实现,现将近日来的个人感想记录如下,如果有什么更好的解决方案请指教. 1.什么是session: Session 对象存储特定用户会话所需的属性及配置信息.这样,当用 ...

  7. Mac软件记录

    前端: Brackets,sourceTree,dreamweaver,ps,ai,softmatic Weblayers. phpStorm,pyCharm,IDEA,eaclipse,XCODE, ...

  8. Android Game Examples

    Game2 using UnityEngine; using System.Collections; public class Game2_Player : MonoBehaviour { publi ...

  9. MAC下安装automake autoconf工具

    I noticed today that while Mac OS 10.6 (specifically, 10.6.2) comes with automake and autoconf, the ...

  10. 记一次-angular-数字格式化

    一个收费功能模块,需要做数据验证. input标签的ng-model的数据格式化 <input type="number" class="form-control& ...