2011-04-30 82 views
3

我有一个Mammal.h文件,上面写着:我应该同时使用头文件和cpp /源文件吗?

#ifndef MAMMAL_H 
#define MAMMAL_H 

class Mammal 
{ 
public: 
    void Speak(); 
}; 

#endif 

我CPP文件看起来像:

#include "stdafx.h" 
#include "Mammal.h" 
#include <iostream> 

void Mammal::Speak() 
{ 
    using namespace std; 

    cout << "Speaking"; 
} 

而且我利用这个代码是在这里看到:

#include "stdafx.h" 
#include "Mammal.h" 

int main() 
{ 
    Mammal *mammal = new Mammal(); 

    mammal->Speak(); 
} 

然而,我可能做到这一点在头文件中:

#include "stdafx.h" 
#include <iostream> 

#ifndef MAMMAL_H 
#define MAMMAL_H 

class Mammal 
{ 
public: 
    void Speak() 
    { 
     using namespace std; 

     cout << "Speaking"; 
    } 
}; 

#endif 

我还没有真正定义偏好...但我确实看到这两个工作。这两种方法都有优点还是缺点?

+1

请将代码放在问题 – 2011-04-30 05:04:57

+0

我非常但是,当我试图这样做时,结果很糟糕。所以为了别人的利益,我使用了pastebay。我同意你的观点,即代码应该在问题中(绝对是最简单的)。但是我觉得你可能不会欣赏一些粗体粗体的文本,其他的不是,一些斜体等等。 – 2011-04-30 05:09:49

+0

@icktoofay:谢谢! – 2011-04-30 05:13:05

回答

3

尝试从多个位置调用该代码 - 因此#包括多个源文件中的标头 - 并且您将在第二种方法中看到问题。如果你有同一个函数的多个定义,即使它们是相同的,链接器也不喜欢它。

2

在头文件包含在多个文件中时,在头文件中定义函数的Beta版是正确的。

我还建议您将标题和实现分开为单独的文件,只是一个很好的编码实践。头文件表示类的“接口”。公共函数是类的用户可以使用的,头文件提供了一种简洁的方式让人们看到函数而不必关心实现。另外,这样可以在不影响呼叫者的情况下更改实现,因为它们只包含标题,而实现通常只是一个链接的库。