C++ 头文件基本上是预写类吗?c++;

C++ 头文件基本上是预写类吗?c++;,c++,class,directory,header-files,C++,Class,Directory,Header Files,正如标题中所述,头文件使用#include来表示基本上预写/预编码的类,这些类中填充了方法和变量,一旦将它们包含到脚本中,就可以使用这些方法和变量。还有,如何才能使一个文件变得简单,您可以使用您为自己的利益创建的头文件?简单的解释就可以了 对于基本上预写/预编码的类,您使用#include的头文件中是否填充了方法和变量,一旦将其包含到脚本中,您就可以使用这些方法和变量 这是一般的概念。在C++中,不是所有的东西都需要在一个类中,所以也可以有非成员函数、类型、预处理器定义、变量等等。此外,有些头声

正如标题中所述,头文件使用#include来表示基本上预写/预编码的类,这些类中填充了方法和变量,一旦将它们包含到脚本中,就可以使用这些方法和变量。还有,如何才能使一个文件变得简单,您可以使用您为自己的利益创建的头文件?简单的解释就可以了

对于基本上预写/预编码的类,您使用#include的头文件中是否填充了方法和变量,一旦将其包含到脚本中,您就可以使用这些方法和变量

这是一般的概念。在C++中,不是所有的东西都需要在一个类中,所以也可以有非成员函数、类型、预处理器定义、变量等等。此外,有些头声明变量、类型和/或函数,但不定义它们——这意味着您可以有限地使用它们,并且通常必须在链接或运行时显示匹配的实现对象

还有,如何才能使一个文件变得简单,您可以使用您为自己的利益创建的头文件

这并没有什么特别的魔力(尽管上面有一些链接问题需要了解,如果您将实现置于离线状态),但首先只需在文件中抛出一些代码:

#pragma once
...
…然后从另一个文件中包含它。如果包含文件位于目录“X”中,则可以使用例如
#include“the_header.h”
(带有双引号的头文件名)在目录“X”中包含头,即使未将包含目录指定给编译器作为命令行参数

如果头文件中有声明但未定义的内容,则需要一个与定义匹配的.cc/.cpp文件,您应该将其编译成一个对象,并使用库与代码链接。例如:

mylib.h
    #pragma one
    int fn();  // declared but not defined

mylib.cc
    #include "mylib.h"
    int fn() { return 42; }   // matching definition

cc -c mylib      // compile mylib.o

app.cc
    #include "mylib.h"
    int main()
    {
        return fn();
    }

cc -o app mylib.o

< C++中头文件的一种常见用法是定义方法或类,而不必实现它们。它定义了一个接口,或者告诉程序的其他部分如何与它们交互。它让执行包含操作的文件知道他们需要知道的关于这些类/方法的信息,而不必告诉他们不需要的一切。对于方法,您知道有一个doSomethingTool方法,并且您知道如何与它交互。只要知道这一点您通常可以#在中包含定义了的任何头文件doSomethingCool,然后链接器在编译时发挥其魔力,找到您调用doSomethingCool的位置,并“连接”实际的实现代码,你可以写在doSomethingCool.cpp中


用于函数、类和变量。

是和否。。。这取决于很多事情

一个包含指令——对于标准C++是——可以是两件事:

#inlclude "filename"

,

,

,

或按以下步骤分开

g++ -c main.cpp
g++ -c fooclass.cpp
g++ -c out.cpp
g++ main.o fooclass.o out.o
(如果您使用MS编译器,您很可能会这样做

cl /c main.cpp
cl /c fooclass.cpp
cl /c out.cpp
link main.obj fooclass.obj out.obj
)

只有最后一步组成了程序(注意main.cpp永远不会知道
打印输出
函数!)。前三种方法仅适用于已更改的文件,因此在大型项目中,可以加快编译速度并将任务分发给不同的团队。(有一些实用程序,如
make
,可以使这件事自动化

所有这些都有一个例外,即如今越来越重要:模板。 由于它们不是作为“要翻译的代码”实现的,而是作为“要扩展的代码”实现的,因此只有当它们必须扩展的内容已知时,才能对它们进行翻译

template<class T>
T max(const T& a, const T& b)
{ return (a<b)? b: a; }
模板
T最大值(常数T&a、常数T&b)
{return(我认为粗体的“defined”应该是“声明”的,而且要吹毛求疵:链接器不是在编译时工作的,而是在编译完所有内容之后工作的。
//main.cpp
#include "fooclass.h"
int main()
{
   foo afoo;
   afoo.hello();
   afoo.bye();
}
// fooclass.cpp
#include "fooclass.h"
#include "out.h"

void foo::hello()
{ printout("hello"); }

void foo::bye()
{ printout("bye"); }
// out.cpp
#include "out.h"
#include <iostream>

void printout(const std::string& s)
{ std::cout << "- " << s << " -" << std::endl; }
g++ main.cpp fooclass.cpp out.cpp
g++ -c main.cpp
g++ -c fooclass.cpp
g++ -c out.cpp
g++ main.o fooclass.o out.o
cl /c main.cpp
cl /c fooclass.cpp
cl /c out.cpp
link main.obj fooclass.obj out.obj
template<class T>
T max(const T& a, const T& b)
{ return (a<b)? b: a; }