C/C++:struct 和 class 的区别

2023-05-16

汇总

  1. struct 是值类型,class 是对象类型
  2. struct 默认的访问权限是 public,而class 默认的访问权限是 private.
  3. struct 总是有默认的构造函数,即使是重载默认构造函数仍然会保留。这是因为 struct 的构造函数是由编译器自动生成的,但是如果重载构造函数,必需对 struct 中的变量全部初始化。并且 struct 的用途是那些描述轻量级的对象,例如 Line,Point 等,并且效率比较高。class 在没有重载构造函数时有默认的无参数构造函数,但是一被重载些默认构造函数将被覆盖。
  4. struct 的 new 和 class 的 new 是不同的。struct 的 new 就是执行一下构造函数创建一个新实例再对所有的字段进行 Copy。而 class 则是在堆上分配一块内存然后再执行构造函数,struct 的内存并不是在 new 的时候分配的,而是在定义的时候分配。

思考

struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体。

虽然感觉 struct 是多余的,但考虑到“对C兼容”就将 struct 保留了下来,并做了一些扩展使其更适合面向对象,所以 C++ 中的 struct 再也不是 C 中的那个了。

两者最大的区别就在于思想上, C 语言编程单位是函数,语句是程序的基本单元。而 C++ 语言的编程单位是类。从 C 到 C++ 的设计有过程设计为中心向以数据组织为中心转移。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++:struct 和 class 的区别 的相关文章

  • 多个结构体,需要在方法中访问相同的字段

    我目前尝试用 C 语言编写一些简单的控制台游戏来娱乐 为此 我需要能够在 嗯 C 中打印类似窗口的结构 我想使用通用渲染方法 让我们称之为frame render 渲染所有不同的 ui 元素 现在的问题是 如何解决这个问题 给定场景 The
  • 如何强制调用 C# 派生方法

    我有一个由某些工具生成的类 因此我无法更改它 生成的类非常简单 没有接口 没有虚方法 class GeneratedFoo public void Write string p do something 在 C 项目中 我们希望提供一种方法
  • 如何在课外使用$this?

    我们可以使用 this课外 请看下面的例子
  • 列出类的所有实例

    我编写了一个 Python 模块 其中有几个类继承自一个名为MasterBlock 我想在脚本中导入此模块 创建这些类的多个实例 然后获取该类的所有子级的所有现有实例的列表MasterBlock班级 我找到了一些解决方案vars Block
  • 我们可以有一个可变长度数组类型的结构元素吗? [复制]

    这个问题在这里已经有答案了 我们可以声明一个可变长度的结构元素吗 条件如下 typedef struct uint8 t No Of Employees uint8 t Employee Names No Of Employees 15 s
  • 类运算符

    我在编写代码时遇到问题 void main Matrix c rows cols rows cols are int numbers c 0 0 2 the line that I m having a problem to do the
  • 如何动态构造方法?

    我设计了一个类 它非常标准 具有一些方法属性 class foo def f1 self print f1 def f2 self print f2 def fn self print fn 现在我想创建一个包含一组 foo 实例的类 cl
  • 结构中字符串的管理

    我知道字符串的长度是可变的 因此它们需要内存中的可变空间来存储 当我们在 a 中定义一个字符串项时struct the struct的大小的长度将是可变的 较旧的语言通过使用固定长度的字符串来管理此问题 但是 C 中没有办法定义固定长度的字
  • 使用 javascript/jQuery 更改类的背景颜色属性

    这似乎是一个简单的问题 但没有任何解决办法 我正在尝试使用 javascript jQuery 动态更改某些文本的背景颜色 从白色或粉色到绿色 但由于某种原因它不起作用 文本使用名为 novice 的 CSS 类进行样式设置 这是CSS 这
  • “struct X typedef”与“typedef struct X”的含义是什么?

    我在现有代码库中有以下 工作 代码 在 C 和 C 之间共享的包含文件中使用 在 MSVC 2010 和 Windows DDK 上编译 struct X USHORT x typedef X PX And enum MY ENUM enu
  • 在 C 中使用另一个结构中的二维结构数组的编码问题

    我正在使用一个二维结构数组 它是另一个结构的一部分 这不是我做过很多事的事情 所以我遇到了问题 该函数在接近末尾的 测试 for 循环后最终失败 它在出现段错误之前正确打印出一行 我的代码中将数据读入虚拟二维结构数组的部分工作得很好 所以它
  • 在Python中计算结构体的CRC

    我有以下结构 来自 C 中的 NRPE 守护程序代码 typedef struct packet struct int16 t packet version int16 t packet type uint32 t crc32 value
  • 为什么在 C++ 类中的数据成员上使用像 m_ 这样的前缀?

    许多 C 代码使用语法约定来标记数据成员 常见的例子包括 m memberName对于公共成员 在所有使用公共成员的情况下 memberName对于私人会员或所有会员 其他人尝试强制使用this gt member每当使用数据成员时 根据我
  • Haskell 类型系统的细微差别

    我一直在深入了解 haskell 类型系统的本质 并试图了解类型类的要点 我已经学到了很多东西 但我在下面的代码片段上遇到了困难 使用这些类和实例定义 class Show a gt C a where f Int gt a instanc
  • 如何使用javascript通过类名更改html元素的值

    这是我用来更改 html 元素值的代码 a class classname href Vtech com This text to be chnage a 如何在页面加载瞬间更改此文本 看来你需要添加DOMContentLoaded或者把你
  • ECMAScript 6 类中的 getter 和 setter 有何用途?

    我对 ECMAScript 6 类中 getter 和 setter 的意义感到困惑 什么目的 下面是我参考的一个例子 class Employee constructor name this name name doWork return
  • 为什么结构中“[0]byte”的位置很重要?

    0 byte在golang中不应该占用任何内存空间 但这两个结构体的大小不同 type bar2 struct A int 0 byte type bar3 struct 0 byte A int 那么为什么这个位置 0 byte这里重要吗
  • 如何在 Angular 2 应用程序中从 TypeScript/JavaScript 中的字符串获取类?

    在我的应用程序中 我有这样的内容 user ts export class User 现在 我这样做 应用程序组件 ts callAnotherFunction User 如果我将类名作为字符串 即 我该如何做到这一点 User 如果可能的
  • 为什么 __instancecheck__ 没有被调用?

    我有以下 python3 代码 class BaseTypeClass type def new cls name bases namespace kwd result type new cls name bases namespace p
  • 用于多个窗口的 Tkinter 示例代码,为什么按钮无法正确加载?

    我正在编写一个程序 应该 按一下按钮即可打开一个窗口 按另一个按钮关闭新打开的窗口 我使用类 以便稍后可以将代码插入到更大的程序中 但是 我无法正确加载按钮 import tkinter as tk class Demo1 tk Frame

随机推荐