C++支持另一个关键字struct,它也可以定义类类型。struct关键字是从C语言继承过来的。

默认初始访问级别不同:

  如果使用class关键字来定义类,那么定义在第一个访问标号前的任何成员都隐式指定为private;如果使用struct关键字,那么这些成员都是public,使用class还是struct关键字来定义类,仅仅影响默认的初始访问级别。

默认继承级别不同:

  class保留字定义的派生类默认具有private继承,而用struct保留字定义的类默认具有public继承

  

 class Base {}
struct D1: Base {}; //public inheritance by default
class D2: Base {}; //private inheritance by default

  有一种常见的误解认为struct保留字定义的类与用class定义的类具有更大的区别。唯一的不同只是默认的成员保护级别和默认的派生保护级别,没有其他区别:

  

 class D3 : public Base {
public:
/*...*/
};
//equivalent definition of D3
struct D3: Base { //inheritance public by default
/*...*/
}; struct D4 : private Base {
private:
/*...*/
};
//equivalent definition of D4
class D4: Base { //inheritance private by default
/*...*/ //initial member access private by default
};

  一般来说只有数据时候使用struct,其它一概使用class。

  如果需要更多函数功能,class更适合,如果不确定,直接使用class。

以上说的都是C++中的struct和class的区别,那么C中的struct和C++中的struct之间的区别是什么呢。答案是:

  C是一种过程化的语言,struct只是作为一种复杂数据类型定义,struct中只能定义成员变量,不能定义成员函数。

参考资料:

  1. 《C++ Primer》第五版 电子工业出版社

  2. http://blog.csdn.net/jirongzi_cs2011/article/details/9945989

struct和class的联系与区别的更多相关文章

  1. 【转】struct和typedef struct在C/C++中的区别

    分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可 ...

  2. struct 和class到底有什么区别

    我们知道struct是C语言的宠儿,当需要一个复杂类型的时候就需要定义一个struct 比如一个学生结构体,含有三个属性,分别是编号.名字和年龄. typedef struct Student { i ...

  3. struct和class定义类的区别

    (1)struct定义的类.struct定义的类,其方法和属性都是公有的(public).因此,外部可以直接访问其内部数据. (2)class定义的类.class定义的类,默认情况下是私有的(priv ...

  4. Struct 和 Union 的详细区别

    Union: 共用体 Struct:结构体 两者的区别: 1:共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放一个被选中的成员, 而结构体则存放所有的成员变量. 2: ...

  5. C++学习基础十三——struct和class的区别

    来自:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct是对C中struct进行了扩展,它不单是一个包含不同数据类型的数据 ...

  6. .net 中struct(结构)和class(类)的区别

    1.struct 结构与class(类)的区别 1)struct是值类型,class是对象类型 2)struct不能被继承,class可以被继承 3)struct默认访问权限是public,而clas ...

  7. struct 区别 在C 和C++ 中

    C语言中:   Struct是用户自定义数据类型(UDT).   C++语言中:   Struct是抽象数据类型(ADT),支持成员函数的定义.       在C++中,struct的成员的默认访问说 ...

  8. class && struct

    http://blog.csdn.net/yuliu0552/article/details/6717915 struct可以包含成员函数,可以继承,可以实现多态. struct为数据结构,class ...

  9. typedef 及其与struct的结合使用

    //相当于为现有类型创建一个别名,或称类型别名. //整形等 typedef int size; //字符数组 ]; ];//=> typedef ]; Line text, secondlin ...

随机推荐

  1. SSM-CRUD入门项目——删除

    删除 分析 可以进行单个删除,直接点击每条记录后的删除按钮 批量删除,通过勾选checkbox框进行选择删除 单个删除: 通过发送DELETE请求的URL:/emp/{id} 这次我们先从contro ...

  2. 《图说VR入门》——googleVR入门代码分析

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53013843 作者:car ...

  3. 【BZOJ2754】[SCOI2012]喵星球上的点名

    [BZOJ2754][SCOI2012]喵星球上的点名 题面 bzoj 洛谷 题解 这题有各种神仙做法啊,什么暴力\(AC\)自动机.\(SAM\)等等五花八门 我这个蒟蒻在这里提供一种复杂度正确且常 ...

  4. CF 1093 E. Intersection of Permutations

    E. Intersection of Permutations 链接 题意: 给定两个序列,询问第一个排列的[l1,r1]和第二个排列[l2,r2]中有多少个共同的数,支持在第二个排列中交换两个数. ...

  5. hive 动态分区插入

    首先需要进行以下设置: set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; se ...

  6. python全栈开发-面向对象-初识

    python_16_day 函数总结: https://www.processon.com/view/link/5b718274e4b0555b39e1055f 面向过程的程序设计的核心是过程(流水线 ...

  7. Redis的事物

    Redis的事物 Redis 事物常用命令 multi标记一个事物块的开始   exec:执行所有事物块内的命令   discard: 取消事物,放弃执行事物块的所有命令   watch key [k ...

  8. 《C++设计新思维》Command设计模式读后感

    原文内容提领: 本书第5章标题为泛化仿函数,我认为本章真正讲述的内容可以总结出一句话! 如何利用C++老标准实现C++11新标准类似std::function提供的功能. std::function简 ...

  9. Unity面试问题归总

    Unity面试问题归总 C#中Struct和Class的区别 Struct是Class的一种 A*寻路 https://blog.csdn.net/windcao/article/details/15 ...

  10. 百度地图之自动提示--autoComplete

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...