2016-09-27 142 views
-4

我只需要在这个主题上进行一次复习,但我不能在网上找到答案。C++ - 类与命名空间

如果你调用一个类Dog

class Dog 
{ 
public: 
    void Dog::woof() 
    { 
     return; 
    } 
}; 
  • 必备Dog开始与Dog::内的每一个功能?这就是我一直这样做,但我想问的是任何情况不是这样的情况?如果我不把Dog::这是否意味着它可以像使用Java的静态方法一样使用?防爆。 Dog.woof();代替myDogObj.woof();

  • 请问,我们使用的是::运营商意味着Woof是在Dog命名空间,即使Dog不是一个命名空间中的事实呢?如果这是真的,这是否意味着类自动创建自己作为命名空间?

  • 为什么我们把Dog::告诉C++,它是属于Dog的方法,而张女士它是class Dog内基本上是说了吗?这不是多余的吗?

  • 是否有任何可以在命名空间或嵌套命名空间内声明Dog::woof的情况?防爆。 Park::Trail::Dog::woof() { return; }

你必须做的:

class Dog 
{ 
public: 
    namespace Park 
    { 
     namespace Trail 
     { 
      void Dog::woof() 
      { 
       return; 
      }  
     } 
    } 
}; 
+3

最后一个例子是无稽之谈,你不能在类的名字空间*里面。 – molbdnilo

+0

如果我要在类中声明'woof',那么在类的外部定义它,但是我把这个函数定义放在一个名称空间中呢?防爆。 '命名空间Park {void Dog :: woof(){return; }}' – Hatefiend

+1

除非'Park'声明在'Park'命名空间中,否则它将不起作用。 Jus试试吧,你会看到的。 – Ceros

回答

2

必须狗里面的每一个功能与狗开始::?这就是如何 我一直这样做,但我想问是否有任何情况下, 不是这种情况?如果我不把Dog ::这意味着它可以是 像Java中的静态方法一样使用?防爆。 Dog.woof();而不是 myDogObj.woof();

没有方法必须在类定义内部以Dog::开头,只在其外部。

是否我们使用::运算符的事实意味着Woof在 Dog的命名空间中,即使Dog不是命名空间?如果这是 是真的,那么这是否意味着类自动将它们自己创建为 名称空间?

是的,在Dog的范围内。

为什么我们把狗::告诉C++,它是属于犬 的方法,而这一事实,它是类犬的内部基本规定 已经?这不是多余的吗?

是的,这就是为什么你不这样做。

+0

即使你把它放在'class Dog'的括号范围之外,你也可以在'Dog'中定义一个方法吗?您在“狗”之外定义的方法是否必须与“狗”在同一个'cpp'文件中? – Hatefiend

+0

@Hatefiend你在Dog中声明它,你可以在其他地方定义它。不,它不。 –

+0

有没有办法在外面声明和定义,还是只能在外面定义? (我猜的是后者) – Hatefiend