struct vs class
在 C++ 中class 和 struct 只有两点主要区别:
- 默认继承权限。默认情况下,class的继承是以private来继承而struct则是按照public进行继承。
- 成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。
而其它的特性,struct和class基本上,甚至严格来说是一样的:
16 |
virtual void func1() = 0;
|
19 |
struct foo: protected bar
|
25 |
void say(string msg) {cout<<msg<<endl;}
|
可以看到:
- 都可以有成员函数:struct可以包含和class中一样的构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;
- 尽管默认访问权限不同,但都可以拥有public/private/protected修饰符;
- 都可以进行复杂的继承和多重继承,一个struct可以继承自一个或多个class,反之亦可。
- 注意这里与C语言并不相同,C 语言中的 struct 从本质上来说只是一个包装数据的语法机制。
在Google C++编程风格指南中也声称:
仅当叧有数据时使用 struct,其它一概使用 class。
在 C++中,关键字struct和 class 几乎含义等同,我们为其人为添加语义,以便为定义的数据类型合理选择使用哪个关键字。
struct 被用在仅包含消极对象( passive objects)上,可能包括有关联的常量,但没有存取数据成员外的函数功能,而存取功能通过直接访问实现而无需方法调用,这儿提到的方法是指只用于数据成员的,如构造函数、析构函数、Initialize()、Reset()、Validate()。
如果需要更多的函数功能,class 更适合,如果不确定的话,直接使用 class。
如果不 STL结合,对于仿函数(functors)和特性(traits)可以不用 class 而是使用struct。
虽然一些C++专家声称可以不再使用struct关键字,而可以总是使用class { public:}来代替。但事实上,struct仍在代码中广泛使用,开发人员常使用struct(部分也是由于C语言的影响)来表示一个轻量级的并不需要严格封装的记录,例如,一个写入文件的记录或数据库表结构就常用struct来声明;而class则主要是用来进行面向对象编程。
在一般情况下,仍必须使用struct结构的主要原因是:
当然,有时使用struct可以让代码看起来更简洁:
1 |
struct Compare { bool operator() { ... } };
|
2 |
std::sort(collection.begin(), collection.end(), Compare()); |
C++ 中的高级特性和语法细节太多,因此遵循一定的编程规范还是很有必要的。
分享到:
相关推荐
从语法上,在C++中(只讨论C++中)。class和struct做类型定义时... 不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些
一、C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。 struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗?...
本篇文章是对C++中struct与class的区别进行了详细的分析介绍,需要的朋友参考下
C++语言中,struct和class都是用于定义复杂数据类型的关键字,但是它们之间有着本质的区别。最重要的一点区别就在于默认的访问控制权限,struct默认的继承访问权限是public的,而class默认的继承访问权限是private的...
在C++编程语言中,`struct`和`class`关键字主要用来定义自定义类型,但它们之间存在一些微妙的区别,特别是在EDA(电子设计自动化)和PLD(可编程逻辑器件)这样的领域,对代码的严谨性和效率有着严格要求。...
在C++中,`struct`和`class`主要的区别在于默认的访问修饰符。C++是面向对象的编程语言,它引入了`class`来实现封装、继承和多态等特性。当定义一个`class`时,其成员默认是`private`的,而定义一个`struct`时,成员...
在C++中,`struct`和`class`在功能上几乎是等价的,主要的区别在于默认的访问修饰符和通常的使用习惯。在实际编程中,选择`struct`还是`class`取决于设计需求和团队规范。如果希望成员默认为公共的,或者在代码风格...
本文中写的都是它们在C++中的异同,而非C 中的,因为在C 中无论是union还是stuct 都没有操作,也没有访问控制的概念。
在C++编程语言中,`struct`和`class`都是用于定义数据结构的关键词,但它们之间存在一些关键区别,这些区别主要体现在访问控制、默认成员访问修饰符和默认构造函数上。 首先,访问控制是两者最显著的区别。在`class...
在C++编程中,`struct` 是一种复合数据类型,它允许我们将多个不同类型的变量组合成一个单一的实体。这使得我们能够更有效地组织和管理数据。本篇将深入探讨`struct`在C++中的使用技巧,并提供一些编程练习题以帮助...
在C++编程语言中,`class`和`struct`都是用于定义自定义数据类型的关键词,但它们之间存在一些重要的区别。这份C++教程可能详细解释了这些差异,并提供了实例来帮助理解。虽然“赚钱项目”这个文件名似乎与主题不...
2、C++中的 struct 和 class 有什么区别? 【参考答案】从语法上讲,class和struct做类型定义时只有两点区别: (一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照...
hash_set c++总结(自定义类型stuct、class)。总结自定义struct、class三个案例。find函数测试,hash_set迭代器。
C++封装(class,struct,public,protected,private,friend)的博客例程。 https://blog.csdn.net/flysnow010/article/details/136907034
c++通过socket udp模式传输struct数据(各种类型数据:int double float char long long等)到c++与python。c++通过socket udp接收数据,python通过enum枚举进行接收并且通过赋值给class类,封装统一方法