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

时间:2010-07-06 16:23:16

标签: c++ class struct namespaces

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

这是格式吗?

struct go
{

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

}

提前感谢您的帮助。

6 个答案:

答案 0 :(得分:67)

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

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

修改

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

答案 1 :(得分:26)

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

  • 您可以重新打开命名空间并添加 跨翻译单位的东西。您 不能用类来做这个。
  • 使用类意味着你可以 创建该类的实例,而不是 名称空间为true。
  • 您可以使用using声明 名称空间,这是不可能的 除非你派生,否则上课 来自他们。
  • 您可以拥有未命名的命名空间。

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

答案 2 :(得分:11)

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

命名空间只是将项目分组在一起的抽象方式。通常,您的程序中不能有两个名为bar()的函数。如果将它们放在不同的命名空间中,则它们可以共存(例如,A::bar()B::bar())。命名空间不能创建为对象;把它想象成一个命名惯例。

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

答案 3 :(得分:8)

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

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

命名空间和类完全不同,用途不同。它们有一些句法相似性。

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

答案 4 :(得分:7)

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

namespace A {
    int f1();
}

namespace A {
    int f2();
}

是合法的,但是:

class A {
    int f1();
};

class A {
    int f2();
};

不是

答案 5 :(得分:0)

来自维基百科

  

通常,命名空间是一个抽象容器,为它所拥有的项目(名称,技术术语或单词)提供上下文,并允许消除具有相同名称(驻留在不同名称空间)的同音项目的歧义。   通常,命名空间中的名称不能包含多个拼写,也就是说,其组件不能共享同一个名称。命名空间也称为上下文,因为名称的有效含义可以根据应用的命名空间而更改。其中的名称可以表示对象和概念,无论是自然语言还是民族语言,构造语言,专业技术术语,方言,社会选择或人工语言(例如,编程语言)。 / p>

另一方面A class defines a type

命名空间可能包含多个类。

修改

一个区别是:

您可以拥有未命名的命名空间,但不能拥有未命名的类

    namespace{    //fine

           //some code....
    }

    class{   //illegal
    }