c++中的前向声明
来源:互联网 发布:跨境电子商城源码 编辑:程序博客网 时间:2024/06/03 03:08
整理于:
http://blog.csdn.net/heyutao007/article/details/6649741http://blog.sina.com.cn/s/blog_68d90fdb0100yapr.html
1. 前向声明好处
1)不必要的#include 会增加编译时间.2)混乱随意的#include可能导致循环#include,可能出现编译错误.
2. 定义
可以声明一个类而不定义它。这个声明,有时候被称为前向声明(forward declaration)。在声明之后,定义之前,类Screen是一个不完全类型(incompete type),即已知Screen是一个类型,但不知道包含哪些成员。不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。类的前向声明之适用于指针和引用的定义,如果是普通类类型就得使用include了。
class A; class B { public: A* m_a; //(不能A m_a) }
3. 前向声明的限制
(1)不能定义foo类的对象;(2)可以用于定义指向这个类型的指针或引用。(很有价值的东西);
(3)用于声明(不是定义)使用该类型作为形参或者返回类型的函数。
4. 实例
c++编译器做的事情主要是:1.扫描符号;2.确定对象大小。所以很多时候并不需要将类都include进来。
比如:
(1)由于所有对象类型的引用所占用的空间都是相同大的,所以c++编译器很好确认对象大小。
class string;class Sample{private:string &s;};这里只需要做一个string的前向声明就可以了,不需要#include <string>
(2)由于所有类型的指针也是相同大小的。所以与(1)类似,也可以只做前向声明就好。
(3)声明成员函数的形参或者是返回类型,也可以利用前向声明的性质。
class string;class foo;class Sample{public:foo foo_test(foo &);private:string &s;foo *f;};
这里,我根本没有定义一个foo类,但是还是可以这样用,因为成员函数不占类对象的大小,所以c++编译器还是可以确定对象的大小。
前向声明的作用在于告诉编译器这个一个在别的地方定义的类型。这样C++编译器就能生成正确的符号表了。
(4) 即使前向声明一个没有定义的类,devc++也可以编译通过,如下所示:
#include <iostream> using namespace std;struct B;class foo;B func();class A{public:B* t;public:foo foo_test( foo & );};class B{public:int a;public:B() {}virtual int add(){return 0;}static int c;};int main(){A a;return 0;}
上面代码也可以编译运行,即使没有看到class foo的定义;
0 0
- c++-前向声明
- c++中的前向声明
- C++中的前向声明
- c++中的前向声明
- c++中的前向声明
- c++中的前向声明
- C++中的前向声明
- c++中的前向声明
- 七、Qt中的前向声明
- C++中的前向声明(ForwardDeclaration)
- C++---前向声明应用注意
- 类前向声明
- c++ 前向声明
- 前向声明
- 前向声明
- C++前向声明
- VC 前向声明
- 前向声明
- 【HDU1863】畅通工程 (kruskal/并查集find)
- struts2文件上传 下载
- PAT 乙级 真题 1002. 写出这个数
- 【bzoj1982】【Spoj2021】【Moving Pebbles】【博弈论】
- 经典排序算法(2) -插入排序 InsertSort
- c++中的前向声明
- HDOJ 1016 Prime Ring Problem素数环【深搜】
- HDU 1452 Happy 2004
- 获取栈中最小值函数,时间复杂度为O(1)
- 详解 CSS 属性 - :before && :after
- SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax
- 通过execve在两个进程间传递环境变量
- Flexpaper的参数解释
- C++课堂学习笔记