2012-11-12 129 views
1

创建并定义类后(在“h文件”中)。 除了“h文件”(属于该类)之外,我该如何决定创建(或不是)“cpp文件”(仅适用于课程)?C++中的类(cpp文件&h文件)

+1

如果成员函数不是微不足道的,那么将它们放在单独的源文件中可能是一个好主意。例外是模板类必须在头文件中完全定义。 –

回答

0

最好的做法是将头文件和实现文件分开,以便在头文件.h中定义类并在.cpp文件中实现它,这将帮助您跟踪和调试错误并显示干净的代码,

在模板类是刚刚记在一个单独的头文件中定义,让您的代码通过分离模板结构良好的和干净的正常类

2

这里是一个小例子,让你去。


这是Foo的头文件。让我们把它称为 “foo.h中”

#pragma once 
#ifndef FOO_H 
#define FOO_H 

class Foo{ 
public: 
    void function(); 
protected: 
private: 
}; 
#endif 

这是Foo的源文件。让我们把它称为“Foo.cpp中”

#include "foo.h" 
void Foo::function(){ 
    // ... implement ... 
    return; 
} 

汇编在一起,我们可以创建一个目标文件。我们将其称为“foo.o” 如果您链接“foo.o”,则可以在程序中使用您的课程。
例子:

#include "foo.h" 
int main(){ 

    Foo foo; 
    foo.function(); 

    return 0; 
} 
+0

如果我有两个类,其中一人有一个矩阵,我想,其他类将有一个访问从矩阵中读取数据。 我如何链接它们? – YkI

+0

@YkI你可以让他们的“朋友”,或者你可以使用观测器和变压器功能的两个类之间的接口。我会推荐后者。所以具有矩阵的类需要成员函数(也称为方法),其函数返回其他类所需的信息。这可能是一个函数,其返回类型是整个矩阵,或者可能是一个函数,它接受一个索引并返回一个特定的值。 *这些将是观察员职能。另一个类需要成员函数(也称为方法)接受矩阵类返回的数据。 –

1

的.h文件是一个描述符文件,描述你的函数/类的签名,让其他班其他cpp文件可以使用它。

您需要将h文件视为合同。你宣布了​​一项义务。

稍后,当您决定实施cpp时,您就履行了义务。

其他类/ cpp文件可以单独依靠您的义务,假设您还将在cpp中执行该义务。

例如:

  1. 创建一个h文件“myClassA.h”和声明一个称为myClassA类()称为myClassA.SayHello成员方法
  2. 您包括myClassA.h在另一类创建myClassB.cpp,这样myClassB就知道myClassA有一个名为SayHello()的方法,它可以调用它。
  3. 如果您不包含myClassA.h,并且您尝试在myClassB.cpp中调用myClassA.SayHello(),您将从编译器中得到一个错误,因为myClassB不能“知道”myClassA。
  4. 如果你确实包含了h文件,但是并没有打算在myClassA.cpp中实际创建和实现myClassA,那么你会得到一个编译错误,因为没有找到实现。
+1

这里有很多管理词汇。复制他们从一个过顶的面向对象的书? :P –

+1

为了记录在案,编程术语不是“合同”或“义务”,但_API_。 –

+0

你是对的,我只是试着用通俗的话来解释它。 虽然我觉得评论有趣, 我确实认为您的评论没有建设性,并且与专用于回答问题的网站无关...... – eran