类和命名空间之间的区别?

Tim*_*ech 36 c++ struct namespaces class

我正在寻找命名空间,我并没有真正看到这些和类之间的区别.我在教自己c ++我已经在网上买了几本书,所以我知道我没有最有效的学习.无论如何,有人可以告诉我两者之间的区别以及在类上使用名称空间的最佳时间.另外,在我正在阅读的书中,我看不到结构.

这是格式吗?

struct go
{

  goNow(){ cout << "go Now"};

}
Run Code Online (Sandbox Code Playgroud)

提前感谢你的帮助.

Cog*_*eel 68

类和结构定义类型.您可以创建一个类型的对象.命名空间只是声明一个范围,其中可以存在其他类型,函数,对象或命名空间.您无法创建类型的对象std(除非您创建了一个名为的类型std,这将隐藏std命名空间).

当你在struct/class(一个方法)中定义一个函数时,你会说"这个函数是对相关数据的基本操作".在命名空间内定义函数时,您会说"此函数在逻辑上与命名空间中的其他函数,类型和对象相关"

编辑

值得指出的是,"一切都是对象"Java和C#等语言经常使用类,就像它们是名称空间一样,因为它们不允许"自由"功能.这可能是混乱的来源.如果你有一个只包含静态成员的其他语言的类,你可能希望在C++版本中使用命名空间和自由函数.

  • +1.关于结构:`class`和`struct`本质上是相同的 - 它们通常都被称为"用户定义的类型".唯一的区别是`class`默认使成员和基类私有,而`struct`使它们公开. (18认同)
  • 我发现Scott Meyers关于[如何非成员函数改进封装](http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197)的帖子在了解何时非常有帮助使用namepsaces. (3认同)
  • 编辑部分“像 Java 和 C# 这样的语言经常使用类,就好像它们是命名空间一样”是非常正确的,并且确实有助于解释事情,特别是如果您像我一样来自 OOP 语言。 (2认同)

Abh*_*hay 26

您可以在网上搜索差异,我相信您会发现很多; 但以下是重要的恕我直言: -

  • 您可以重新打开命名空间并在翻译单元之间添加内容.你不能用课程来做这件事.
  • 使用类意味着您可以创建该类的实例,而不是命名空间.
  • 您可以对命名空间使用using声明,除非您从它们派生,否则这对于类是不可能的.
  • 您可以拥有未命名的命名空间.

命名空间定义了一个新的范围,并且命名空间的成员被称为具有命名空间范围.它们提供了一种避免名称冲突(变量,类型,类或函数)的方法,而不会给处理嵌套类带来不便.


bta*_*bta 11

是一种数据类型.如果您有一个名为的类Foo,则可以创建类的对象Foo并以多种方式使用它们.

一个命名空间是简单的分组物品放在一起的一种抽象的方式.通常,您的程序中不能有两个函数bar().如果将它们放在单独的命名空间中,那么它们可以共存(例如,as A::bar()B::bar()).命名空间不能创建为对象; 将其视为命名惯例.

如果要编写要与可以定义并用作变量的对象关联的代码,请编写一个.如果您正在编写API或库,并且想要包装所有函数和常量,以便它们的名称不会与用户可能编写的任何内容冲突,请使用命名空间.


小智 8

命名空间是一种对标识符进行分组的方法,以便它们不会发生冲突.

类是对可以实例化(通常)并且封装功能性和状态的对象的定义.

命名空间和类完全不同,并且用于不同的目的.它们有一些句法相似性.

结构是类,具有不同的默认访问说明符(对于struct为public,对于class为private) - 在所有其他方面它们是相同的.


小智 7

一个主要的区别是命名空间可以重新打开,但类不能是:

namespace A {
    int f1();
}

namespace A {
    int f2();
}
Run Code Online (Sandbox Code Playgroud)

是合法的,但是:

class A {
    int f1();
};

class A {
    int f2();
};
Run Code Online (Sandbox Code Playgroud)

不是