![]() |
1
41
您可以创建使用指向结构的指针的初始值设定项函数。这是惯例。
可怕的伪代码,在malloc或free上没有错误检查
有人可能会来解释一些早期的C++预处理器/编译器如何在C.进行这一切。 |
![]() |
2
21
例如C++代码:
等效C代码:
函数“iNITAAYTYPE”作为构造函数将在C++中使用。 |
![]() |
3
12
结构的问题是,所有内容都是公共的,因此没有数据隐藏。 我们可以解决这个问题。
然后创建一个包含如下定义的私有头文件:
然后在您的实现中,您可以执行如下操作:
重要的一点是 是 使结构安全和可初始化的工程模式。 |
![]() |
4
8
不,不是直接的。最接近的方法是编写一个函数,分配一个实例并填充一些字段。 |
![]() |
5
5
您可以编写一个返回C结构的函数:
如果你想知道在C中是否可以有“正常”的成员函数,那么,在某种程度上,你可以。我更喜欢对象作为第一个参数样式。将指向结构的指针作为第一个参数传递。通过这种方式,您可以使用多个函数来定义对象的接口:
如果您以这种风格编写,那么您最后得到的是一种抽象数据类型。我见过通过在C++中使用函数指针来模拟C++中的成员函数调用语法的人,然后做:
linux内核使用它来定义文件系统驱动程序的接口。这是一种写作风格,一个人可能喜欢,也可能不喜欢。我不太喜欢它,因为我一直在为数据使用结构成员,而不是像流行的面向对象语言那样模拟成员函数调用。 |
![]() |
6
3
基本上,C++创建包含方法地址的指针列表。此列表称为类定义(类定义中还有一些数据,但我们暂时忽略了这些数据)。
现在,您可以通过为每个类创建“struct class”类型的结构来定义所拥有的类,然后调用其中存储的构造函数。这同样适用于析构函数等。 如果需要实例的方法,则必须将它们放入类结构中,并在实例结构中保留指向类的指针:
继承有点棘手,留给读者作为练习。
如果您想看一个示例,请查看 glib (Gtk+项目的一部分)。 |
![]() |
7
2
如果是全局变量(初始化为零),则 能够 在某种程度上模拟一个无参数构造函数,方法是在其中包含一个“initialized”标志,然后让其他函数检查该标志,如果该标志为零,则初始化该结构。不过,我一点也不确定这是个好主意。 而且,正如其他人指出的,你也可以用宏做一些可怕的事情。。。 |
![]() |
8
2
但在一篇评论中,您提到需要一个“默认构造函数”——我想您的意思是希望将一些(所有?)结构字段初始化为默认值。 这是在C中使用一些编码约定完成的——函数、宏或混合。 我通常是这样做的--
|
![]() |
9
2
|
![]() |
10
2
下面是一个使用构造函数的简单程序。函数“default_constructor”在main内部被调用,没有任何显式函数调用。
输出: 默认构造函数 在构造函数中,可以包含一些初始化语句,并使用析构函数释放内存,如下所示:,
希望这对你有帮助。 |
![]() |
11
1
不是真的。如果我没记错的话,最接近类的是结构。分配内存并填充字段。我不知道你会怎么做一个通用的构造函数类型的东西。理论上,您可以编写一个宏来完成其中的一些操作。但不确定这是否真的值得。 |
![]() |
12
1
如果这对你不起作用,那么看看GObject。 http://en.wikipedia.org/wiki/GObject . 它是GTK和Gnome中使用的C对象系统,几乎可以将“C中的对象”拖动到11。 来自维基百科: GLib对象系统或GObject是一个自由软件库(由LGPL覆盖),它提供了一个可移植的对象系统和透明的跨语言互操作性。 系统支持构造函数、析构函数、单继承、接口、虚拟公共和私有方法等。它也比在C++中做同样的事情要繁琐和困难。玩得高兴 |
![]() |
13
0
不,结构只是一堆数据。不能在结构中声明函数,因此无法为其创建构造函数。 |
![]() |
KiraHoneybee · 具有构造函数参数的模板化类 2 年前 |
![]() |
nick2225 · 隐式调用复制构造函数? 2 年前 |
![]() |
nohaga · 为什么在本例中p3需要默认构造函数? 2 年前 |
![]() |
Aadil Hoda · 为什么类类型的成员需要初始化? 2 年前 |
![]() |
EloiGG · 具有任意类型的变量的可数的C++函数 2 年前 |