c++ struct与class

2023-05-16

1.开篇

在c++中,struct与class的区别其实不算特别大,两个关键词的用法在很多地方有相似之处。那为什么在c++中会有struct这个关键字呢?
先说结论:
主要原因是c++需要保留对c的兼容性,c中有struct,所以c++也保留。不光struct,很多其他地方也都是为了保留对c的兼容。

2.c中的struct

在c语言中,struct 只能包含成员变量,不能包含成员函数。所以在c语言中,struct中不能包括任何函数,否则编译器会报错,编译无法通过。

c是一种面向过程的编程思路,面向过程认为数据与计算是分开的,struct关键字就是上述理念的体现。

c语言中struct定义例子

struct A
{
	char c;
	int n;
	int m;
	... // 其他成员变量

3.c++中的struct

c++中保留了c语言中的 struct 关键字,这样可以让c++编译器兼容以前用c语言写的代码,并正常编译运行。
相比c语言中的struct关键词,c++中的struct功能强大了很多:
1.最重要一点区别,c++中struct可以定义成员函数。
2.struct可以被继承。
3.struct还可以实现多态。

先看一个实例,

struct person {
    char name[30];
    int age;
    float heigth;
};

void func() {
    person p = {"lili", 18, 1.65};
    cout<<"name is: "<<p.name<<", age is: "<<p.age<<", heigth is: "<<p.heigth<<endl;
}

int main(int argc, char const *argv[])
{
    func();
    return 0;
}

我们自己定义的struct结构体变量,可以通过成员运算户号.来访问各个成员。
另外,结构在哪里声明也很重要,因为涉及到变量的作用域问题。struct声明可以放在函数中,也可以放在main方法前面。如果放在函数中,则是内部声明,只能被该函数使用。而在main方法之前声明,则可以被后面所有函数使用。

结构体初始化的时候,用逗号将所有成员值分开,并且将所有成员变量用大括号括起来,就完成了结构体的初始化。

4.struct与class的区别

1.继承权限:struct默认为public,而class默认的为private。
2.访问权限:struct默认的成员变量访问控制权限是public,而class默认的成员变量访问权限则为private。
3.class可以用于定于template,struct不能。

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

c++ struct与class 的相关文章

  • CSS class 和 id 同名

    css class 和 id 同名有什么问题吗 就像文章 帖子页脚的 footer 和页面页脚的 footer 一样 不 完全可以接受 一个类是使用 a 来定义的 并且 ID 是使用定义的 因此 就浏览器而言 它们是两个完全独立的项目 唯一
  • 结构填充和包装

    考虑 struct mystruct A char a int b char c x struct mystruct B int b char a y 结构的大小分别为 12 和 8 这些结构是填充的还是包装的 何时进行填充或包装 Padd
  • 如何获取Python对象父级?

    所以 我试图获取自定义对象 内部 的对象 这是一个例子 假设 o 是一个对象 无论是什么类型 它都可以存储变量 o Object class Test def init self self parent o This is where I
  • 有没有办法在 C 中按多个变量对结构进行排序?

    我必须编写一个对数组中的结构进行排序的函数 结构是 define MAX USERNAME LENGTH 16 typedef struct char username MAX USERNAME LENGTH unsigned int ri
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 在打字稿中获取类的键

    我有一个包含很多方法的类 我们称之为 myClass 我这样称呼它 myClass key 有没有办法从 key 获取可能的值 我希望有类似 keyof myClass 的东西 但我得到 myClass 引用一个值 但在这里被用作类型 问题
  • C++ 自注册类有多安全?

    来自 哪里这个线程 https stackoverflow com questions 77817 c runtime knowledge of classes我用 C 实现了一个与所选解决方案类似的系统 我现在的问题是 用户 Daniel
  • 错误:“Int”无法转换为“@lvalue Float”

    给定以下函数 func greatestCommonDenominator first Int second Int gt Int return second 0 first greatestCommonDenominator second
  • 仅导出嵌入结构实现的方法子集

    是否可以仅导出嵌入结构实现的方法的子集 这是一种与减少代码复制和粘贴非常不同的方法吗 还有更惯用的方法吗 type A struct func a A Hello fmt Println Hello func a A World fmt P
  • 从 SpatialPolygons 和其他 sp 类中提取要素坐标

    Package sp为不同的空间概念 点 线 多边形 提供了许多类 对于某些类 访问要素坐标很简单 例如SpatialLines 所有示例均取自相应课程的帮助页面 l1 cbind c 1 2 3 c 3 2 2 l1a cbind l1
  • 在 Java 中从两个不同的类设置和获取静态变量

    假设我有 3 个课程 A Data and B 我从类中传递一个变量A它将传递的变量设置为类中的私有变量Data 然后在课堂上B 我想调用已更改的特定变量 So I do Data data new Data data getVariabl
  • 如何重载“新”方法?

    我刚刚开始学习 Rust 我想知道是否有方法重载方法 首先 我创建了一个结构并使用 impl 来实现基本的 新 方法 然后我想添加带有一些参数的 新 方法 并且我尝试使用 Trait 来实现这一点 以下代码已成功编译 但是当我尝试将 new
  • 类变量在其定义范围内?

    这可能是一个愚蠢的问题 我正在尝试制作文本泥 我需要每个 Room 类包含其他 Room 类 以便在尝试移动到它们或从它们获取信息时可以引用 但是 我不能这样做 因为我显然无法在其定义中声明一个类 那么 我该怎么做呢 当我说我做不到时 我的
  • C++ 编译器可以对结构中的元素重新排序吗

    C 编译器 特别是 g 可以对结构体的内部元素重新排序吗 我看到一些奇怪的行为 其中我有一个包含如下内容的结构 Struct SomeStruct long someLong long someLongArray 25 unsigned l
  • 最终类中的静态函数是否隐式最终?

    我的问题基本上与this https stackoverflow com q 8766476 3882565一 但这是否也适用于static功能 我想了解 编译器是否处理所有static函数在一个final类为final 是否添加final
  • 使用 PDO 的基于 PHP 类的用户系统 - 调用非对象上的成员函数prepare()

    我做了相当多的研究 故障排除和搜索 试图解决我的问题 但没有运气 所以这是错误 调用非对象上的成员函数prepare 生成此错误的代码位于我的用户 Auth 类中 如下所示 this gt dbManager gt db gt prepar
  • Jquery 检测选项卡导航的相同类和文本

    有谁有检测相同文本的经验 和班级 这是我当前的代码 ul nav li click function ul slideMove li fadeOut slow var sharedata this text ul slideMove li
  • C++ - 如何从类的构造函数中初始化单独类的构造函数?

    基本上我想要实现的是创建该类的本地 和私有 实例deltaKinematics在课堂里geneticAlgorithm In the geneticAlgorithm h我有的文件 class DeltaKinematics class i
  • 如何在C中实现结构体的二维数组

    我目前正在尝试了解如何在 C 中实现二维结构数组 我的代码一直在崩溃 我真的想让它结束 就像我所有的方法都变得对 C 垃圾一样 这就是我得到的 typedef struct int i test test t 20 20 t test ma
  • 如何检查类中是否存在成员名称(变量或函数),无论是否指定类型? [复制]

    这个问题在这里已经有答案了 这个Q是以下内容的延伸 模板化检查类成员函数是否存在 https stackoverflow com q 257288 514235 是否有任何实用程序可以帮助找到 类中是否存在成员名称 该成员可以是 变量或方法

随机推荐