c++ - #include .h 和只声明 A 类之间的区别;在 C++ 中

标签 c++ class header

<分区>

我正在为学校分析一个操作系统项目并遇到这个头文件:

//内核内核

#ifndef _KERNELEV_H 
#define _EVENT_H_

typedef unsigned char IVTNo;

class Thread;
class PCB;
class KernelSem;

class KernelEv {
public:
     KernelEv (IVTNo ivtNo);
     ~KernelEv();
     int wait(int MaxTimeToWait);
     void signal();

[...]

现在,在编写这些方法(KernelEv、~KernelEv、wait 和 signal)的完整定义时,它们使用了类 Thread、PCB 和 KernelSem 的属性。一般引入例如#include Thread.h 之间有什么区别? #include KernelSem.h;并像这样声明类:class Thread;数据访问权限是否存在差异?还是完全不同?

感谢您的帮助,我希望我的问题足够清楚。

最佳答案

首先请注意,如果只引入类,则无法使用方法;

class Thread;

Thread x; // compile error: size of x unknown
Thread* x; // this is ok
// set x to some valid thread, maybe as a parameter
x->signal(); // compile error

但是无论您的声明是在标题中还是包含在您的文件中都没有区别。也就是说,您可以用 header 的拷贝替换 include 行,一切都会正常工作(上面示例中的每一行都是有效的)。然而,有很多理由不这样做。易于维护将是首要问题,同时还有可读性和模块化。它也不太适用于编译器缓存(因此通常需要更长的时间来编译)

关于c++ - #include .h 和只声明 A 类之间的区别;在 C++ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18442182/

相关文章:

c++ - 在 C++ 中捕获 const char* 异常

c++ - 将函数从一个类发送到另一个类并在 C++ 中执行

java - 无法声明类字段

python - 如何在 Python 中使用 Selenium 提取文本元素?

c++ - 有人可以帮助阐明头文件的工作原理吗?

c++ - 错误是什么?Q-确定并打印给定 n 值的以下谐波级数之和。(1+1/2+1/3+........+1/n)

c++ - 将 STL 映射存储到 Boost ConstBufferSequence

c++ - C++文件读写

c - 假设我只有 .h 文件和 .o 文件,如何调用函数?

powershell - 替换Word文件中页眉、页脚中的特定文本和普通文本