C/C++

C/C++前向声明

2018-10-09  本文已影响0人  cx7

C/C++前向声明

前向声明是为了
1. 避免头文件循环引用
2. 避免引入头文件

头文件循环引用

如果类A包含了类B 而B.h包含了A.h就会造成头文件的循环引用
#include "B.h"
class A {
private:
    B *b;
};

#include "A.h"
class B {
};
因为编译器在编译到B.cpp时 会先处理A.cpp 然而A.cpp中引用了B 会导致死循环错误

解决方法是在A.cpp中前向声明B 告诉编译器B是一个类 编译时先跳过 
#include "B.h"
class B;

class A {
private:
    B *b;
};

避免引入头文件

如果类A用到了某个内部的类 打包时就不得不把内部的头文件也对外开放
库的开发者肯定不希望对外暴露内部的细节 所以需要利用前向声明跳过
#include "B.h"

class A {
private:
    B* b;
}

可以改为 去除对B.h的引用 改为在A.cpp中引用B.h
class B;

class A {
private:
    B* b;
};

如果类A在命名空间test中 则这样声明
namespace test {
class B;
}
上一篇下一篇

猜你喜欢

热点阅读