【发布时间】:2012-02-22 14:34:30
【问题描述】:
如果我在 C 中编写抽象数据类型,是否编写函数来对这些数据类型执行操作并在名为 functions、methods,还是完全不同的东西?我似乎无法在任何地方找到建设性的答案。 方法是 C++ 的特定术语吗?
【问题讨论】:
标签: c naming-conventions abstract-data-type
如果我在 C 中编写抽象数据类型,是否编写函数来对这些数据类型执行操作并在名为 functions、methods,还是完全不同的东西?我似乎无法在任何地方找到建设性的答案。 方法是 C++ 的特定术语吗?
【问题讨论】:
标签: c naming-conventions abstract-data-type
方法是 C++ 特定的术语吗?
“方法”是一个面向对象的编程术语,指的是作为对象命名空间一部分的函数。因此,您可以使用 C++、Java、Objective-C 等语言为对象创建方法。另一方面,在 C 中,您仍然拥有独立的函数,而不是方法。
请记住,类方法的“官方”C++ 术语是“成员函数”,并在规范的第 9.3 节中进行了描述。
【讨论】:
我一直使用“方法”作为“成员函数”的同义词,这意味着 C++,因为 C 没有这样的东西。
然而,另一方面,有人可能会认为foo_alter_state 在以下方面的作用:
struct foo {
// implementation stuff;
};
void foo_alter_state(struct foo *self);
曾经仍然是一种在 foos 上运行的方法,尽管它是独立的。它基本上是 C 语言中的 OOP,但是是手动实现的。
如果 struct foo; 仅在标头中声明,但未在任何地方公开定义,则这种观点可能尤其正确。
【讨论】:
方法是与类关联的函数。
由于 C 中不存在类,所以从技术上讲,一切都是函数。
【讨论】:
方法通常用于描述作为 OOP 中类的一部分的“函数”。函数就是这样 - 函数,而不是类的一部分。
在 .h 文件中,我称它们为“函数声明”,在 .c 中,我称它们为“函数实现”……不过我不是专家,只是我的 .02。
【讨论】:
严格来说,函数是为给定输入提供输出的操作。而方法是绑定到类型的函数。 C只有功能,我不认为你认为有什么不同。
但是,如果您正在实现 ADT,例如,将函数指针放入结构中(指向将上下文指针指向结构实例的函数),以便您使用方法模仿对象,那么我看不到有理由称它们为“作为函数实现的方法”。
【讨论】:
我不认为这是一个特别有用的区别,但一般来说,你会称它们为 functions 因为这个词 method 意味着一大堆C 不提供的面向对象的东西。赞the following:
方法具有在运行时可以访问的特殊属性 存储在类的实例中的数据(或类实例或类 对象或对象)它们与之相关联,从而能够 控制实例的状态。
但我经常听到那些在 Java 上长大的人将 C 函数 称为 方法,而我从来没有对它们的含义感到困惑。一点也没有。
但是,您可能想要做出以下(松散的)区分:
过程是一段代码,可以做某事
函数是将一个或多个输入与输出相关联的过程
方法是属于某个类或该类实例的过程
【讨论】: