码迷,mamicode.com
首页 > 编程语言 > 详细

C++类的前向声明

时间:2015-01-23 21:30:49      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

前向声明的定义:有些时候我们可以声明一些类但是并不去定义它,当然这个类的作用也很有限了。

比如class foo;

声明一个foo类,这个声明,有时候也叫做前向声明(forward declaration),在声明完这个foo类之后,定义完这个foo类之前的时期,foo类是一个不完全的类型(incomplete type),也就是说foo类是一个类型,但是这个类型的一些性质(比如包含哪些成员,具有哪些操作)都不知道。

因此这个类的作用也很有限.

(1)不能定义foo类的对象。

(2)可以用于定义指向这个类型的指针或引用。(很有价值的东西)

(3)用于声明(不是定义)使用该类型作为形参或者返回类型的函数。

正因为有前向声明的存在,我们在很多时候可以简便的做一些事情。

在c++中,如果要为类编写头文件的话,一般是要#include一堆头文件的,但利用前向声明和c++编译器的特性,其中大部分是不需要的。

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++编译器就能生成正确的符号表了。

C++类的前向声明

标签:

原文地址:http://www.cnblogs.com/yyxt/p/4244991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!