zoukankan      html  css  js  c++  java
  • 关于类的前向声明

     前向声明的定义:有些时候我们可以声明一些类但是并不去定义它,当然这个类的作用也很有限了。
    比如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


  • 相关阅读:
    Kubernetes之Pod调度约束即将Pod分配给节点
    Kubernetes控制器之DaemonSet
    Kubernetes控制器之StatefulSet
    PureFtpd 连接数据库错误
    Ubuntu 脚本笔记
    饥荒 死亡后不删存档的办法
    浏览器前进后退对下拉框数据的丢失(省市联动实现和例子)
    Mac 设置环境变量
    给现有MVC项目增加Web API支持
    文件编辑器 vi
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318584.html
Copyright © 2011-2022 走看看