关闭

C/C++struct与C++struct/class关键字详解

标签: structC++C语言
845人阅读 评论(0) 收藏 举报
分类:

C/C++中的struct

C中的struct只是一个简单单单结构体,其中只能声明变量,而不能声明函数,而C++中的struct中却可以有函数。

C++中struct成员默认访问权限为public,这是为了兼容C。在C中没有访问权限这一说。

C++中的struct/class(转)

1.字面上的区别

在字面上struct是structure的缩写,通常叫做“结构体”,在C语言里用于将多种数据、多个变量组织在一起,便于表达比较复杂的数据类型,在C++中为了兼容C语言保留了该关键字,并且保留了C语言中的所有功能。

而class,则称作“类”,是C++新增来支持面向对象思想概念中“类”的概念的一个关键词,并且比struct具有了更强大的功能,不仅可以像C语言中的struct一样把数据组织在一起,还可以将与数据相关的方法组织在一起,并增加了如虚函数、继承等特性来支持面向对象编程。

虽然在字面上struct与class的含义不一样,但在C++中其功能基本是相同的,C++中的struct不仅可以包含数据成员,而且与class一样支持新增的面向对象特性,仅在以下细节上有略微差别。

既然两者在字面上不一样,为了更好地利用这一点,建议在C++中使用struct时仍然只使用C中的特性,来表示一些复杂的数据而不进行方法的封装,这样还可以提高软件的可读性。

2.默认成员权限

struct的成员默认权限是public,而class的成员默认权限是private。例如:

struct Sb{ void f( void ) { } };

struct Sc : Sb{ };

class Cb{ void f( void ) { } };

class Cc1 : public Sb{ };

class Cc2 : Sb{ };

sb.f(); // 合法

cb.f(); // 不合法,因为在Cb类中f( )函数默认为private,此处不可访问

建议在工程代码中显示声明成员的权限,而有使用默认权限,因为并不是所有人都知道这一点。

3.默认继承方式

struct的默认继承方式为public,而class的默认继承为private,例如:

Sc sc; Cc1 cc1; Cc2 cc2;

sc.f(); // 合法

cc1.f(); // 合法,因为Cc1显示地使用public继承

cc2.f(); // 不合法,Cc2默认private继承自Sb,在Cc2中f( )为private

在C语言中struct不可以继承,虽然我们知道在C++中struct可以继承,但在实际使用中,在不需要继承的场合我们使用struct,而在需要继承的场合使用class,这样更贴近其字面意思,使程序有更好的可读性。

虽然知道class的默认继承为private,但并不是项目组的每个人都清楚这一点,建议在工程代码中不省略private,使代码可读性更强。

4.用于定义模板参数

模板为C++语言新增特性,C语言没有,只有class可用于定义参数,而struct不可以,例如:

template

class TValue {

private: T _v;

public: TValue(T v) : _v(v){}

T Get( void ) { return _v; }

};

此处只能使用class,不能使用struct。当然,此处还可以使用typename代替class,class与typename也仅在定义模板参数时可以互换,而且建议此时使用typename,因为这样读起来更接近人类语言,更具有可读性。



2
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

C++--struct的用法

1.struct的自然对界  struct是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如array、struct、unio...
  • JoeBaby_
  • JoeBaby_
  • 2012-09-10 16:17
  • 15563

C++struct结构类型

定义结构用关键字struct创建,stuct aaa{int a;char  b;};定义结构的时候他里面的变量类型都是没有存储到计算机的内存中的,如图: 现在我们来使用以下定义的这个结构...
  • s452195377
  • s452195377
  • 2017-09-17 18:32
  • 105

C++struct里定义函数

在做一个小的程序题的时候,看到了struct中定义了函数,之前没有看到过,所以查了一点相关的知识,在这里记录一下: c++中允许在结构体当中定义函数,它的用法和类的用法很像,不过与类有一个区别在于,s...
  • ucasliyang
  • ucasliyang
  • 2016-09-28 16:31
  • 4671

C++之struct结构体使用详解

C/C++有char、int、float、double等基本数据类型,但是假如我们要存储一个人的信息,包含姓名、身高、体重等信息,仅使用一种基本数据类型是无法实现的,因此我们希望有一种数据格式能够将所...
  • Bruce_0712
  • Bruce_0712
  • 2017-02-13 13:14
  • 2520

C/C++结构体struct详解

结构体定义 typedefstruct 用法详解和用法小结 typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。 具体区别在于: 若struct n...
  • itguangit
  • itguangit
  • 2015-11-30 19:07
  • 9147

C和C++中struct使用的区别

今天参看了louden用c编写的编译器,发现其中一些地方使用struct很奇妙。所以又研究了一下struct的区别,并发现c和c++在某些地方是有区别的。 struct作为类的一种特...
  • CSDNwei
  • CSDNwei
  • 2016-02-19 14:39
  • 1425

c/c++ struct内存对齐

内存对齐 结构体的内存布局依赖于CPU、操作系统、编译器及编译时的对齐选项。结构体内部成员的对齐要求,结构体本身的对齐要求。最重要的有三点 (一)成员对齐。对于结构体内部成员,通常会有这样的规定:...
  • chenshunming
  • chenshunming
  • 2013-11-23 18:42
  • 1036

C++中class与struct的区别

 Lippman的《深度探索C++对象模型》一书中,有一章专门提到了C++中关键词所带来的差异。其中一个主要的问题就是:struct与class的区别。  网上看了一些其他文章,写的简...
  • u011080413
  • u011080413
  • 2014-12-25 10:28
  • 703

重拾C/C++ 使用Struct结构建立简单的链表

本次程序会用到的基本知识:typedef: C/C++中的关键字的一种,用于给复杂的数据类型进行重新换名。  例子: typedef int km_per_hour ;  //1. int curre...
  • YtdxYHZ
  • YtdxYHZ
  • 2015-10-07 01:38
  • 3065

C++学习笔记之五 复合类型之结构体(struct)

1、结构(struct)简介 假如需要存储一个篮球运动员的信息,那么可能需要存储他的姓名、工资、身高、体重、平均得分、命中率、助攻次数等信息。这些数据的格式各不相同,像姓名是字符串类型,身高和体重是整...
  • walkman_lfq
  • walkman_lfq
  • 2016-04-26 15:39
  • 910
    个人资料
    • 访问:86313次
    • 积分:2061
    • 等级:
    • 排名:千里之外
    • 原创:108篇
    • 转载:17篇
    • 译文:0篇
    • 评论:15条
    文章分类
    最新评论