struct和class的联系与区别
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的联系与区别的更多相关文章
- 【转】struct和typedef struct在C/C++中的区别
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可 ...
- struct 和class到底有什么区别
我们知道struct是C语言的宠儿,当需要一个复杂类型的时候就需要定义一个struct 比如一个学生结构体,含有三个属性,分别是编号.名字和年龄. typedef struct Student { i ...
- struct和class定义类的区别
(1)struct定义的类.struct定义的类,其方法和属性都是公有的(public).因此,外部可以直接访问其内部数据. (2)class定义的类.class定义的类,默认情况下是私有的(priv ...
- Struct 和 Union 的详细区别
Union: 共用体 Struct:结构体 两者的区别: 1:共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放一个被选中的成员, 而结构体则存放所有的成员变量. 2: ...
- C++学习基础十三——struct和class的区别
来自:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct是对C中struct进行了扩展,它不单是一个包含不同数据类型的数据 ...
- .net 中struct(结构)和class(类)的区别
1.struct 结构与class(类)的区别 1)struct是值类型,class是对象类型 2)struct不能被继承,class可以被继承 3)struct默认访问权限是public,而clas ...
- struct 区别 在C 和C++ 中
C语言中: Struct是用户自定义数据类型(UDT). C++语言中: Struct是抽象数据类型(ADT),支持成员函数的定义. 在C++中,struct的成员的默认访问说 ...
- class && struct
http://blog.csdn.net/yuliu0552/article/details/6717915 struct可以包含成员函数,可以继承,可以实现多态. struct为数据结构,class ...
- typedef 及其与struct的结合使用
//相当于为现有类型创建一个别名,或称类型别名. //整形等 typedef int size; //字符数组 ]; ];//=> typedef ]; Line text, secondlin ...
随机推荐
- (转)ASP.NET中常见文件类型及用途
从入门导师那继承来的习惯,也是加上自己的所谓经验判断,一直对WEB开发不太感冒,可惜呀,从业近二十年,还得从头开始对付HTML.CSS.JS.ASPX,以前的经验,用不上啦!!!先从好好学习ASPX开 ...
- FlexPaper 里的pdf2json.exe 下载地址
在使用FlexPaper 做在线阅读,需要使用到pdf2json.exe,将PDF转成JSON或者XML格式,网上很少下载的,现在提供一个下载的地址 http://pan.baidu.com/s/1i ...
- 20155336虎光元实验四 Android开发基础
20155336虎光元实验四 Android开发基础 实验内容 1:完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 2:创建 ThirdActivi ...
- SupperSocket深入浅出
这篇文章出要是SuperSocket底层如何接收数据 Process(ArraySegment<byte> segment) 获取加载数据(直到数据全部接收后返回) namespace S ...
- OpenCV参考手册之Mat类详解
OpenCV参考手册之Mat类详解(一) OpenCV参考手册之Mat类详解(二) OpenCV参考手册之Mat类详解(三)
- 创龙6748开发板加载.out出现a data verification error occurred, file load failed
1. 需要提前添加GEL文件 2. 找到GEL文件路径 3. 然后再加载.out文件
- cogs1533 [HNOI2002]营业额统计
cogs1533 [HNOI2002]营业额统计 啦啦啦啦 不维护区间的平衡树题都是树状数组+二分练手题! 不会的参考我的普通平衡树的多种神奇解法之BIT+二分答案 和上一篇博文完全一样2333 另外 ...
- L015-linux系统文件权限体系手把手详解小结
L015-linux系统文件权限体系手把手详解小结 2016-5-24 今天星期二,昨天和今天利用一些闲散时间把第15节课学完了,最近有点懒散哈,还得努力才是.. 这节课内容不多,扩展的也少,主要就是 ...
- 自己通过Cygwin编译的windowsx86下的更新至4.0.1
采用方法:https://my.oschina.net/maxid/blog/186506 方法中在3.2.6未找到src/redis.h文件 未修改 方法中 /deps/hiredis/net.c ...
- java 通过内存映射文件来提高IO读取文件性能
MappedByteBuffer out = new RandomAccessFile("src/demo20/test.dat", "rw"). getCha ...