zoukankan      html  css  js  c++  java
  • #include类的头文件与直接写class加类名有何区别

    在写 头文件的时间 经常会

    有一些 class QFile 等这类 看似 是声明的东西..例如下面

    #ifndef WINDOW_H
    #define WINDOW_H

    QT_BEGIN_NAMESPACE
    class QTcpServer;
    class QTcpSocket;
    class QProgressBar;
    class QLabel;
    class QDialogButtonBox;
    class QFile;
    QT_END_NAMESPACE
    //code end
    class QAction;
    class QCheckBox;
    ...

    如果没有 声明 将会 出现类似下面的错误

    ISO C++ forbids declaration of 'QFile' with no type

    那么 这个是做什么用的呢???? 
    是因为在头文件里面只有这些类的指针申明,并没有真正实例化,在这个头文件对应的cpp文件里面应该会
    #include < QDialogButtonBox >
    #include < QFile >
    ... 
    在cpp文件里面才会正真实例化这些类。
    其 实直接在头文件里面#include < QDialogButtonBox> #include< QFile>也是可以的,像它这样做,好像是可以降低各个文件编译时的关联度,不会在改动了一下部分类的时候,引发其他大量文件的重新编译,在做小工程的时候没什么区别,但是做大了,编译一次需要好几个小时的时候,这样做的优势就显现出来了

    class   类名只是声明存在这么一个类,但是通过这个声明无法得到任何关于此类的具体信息。这样你可以在其他使用到的地方声明一个该类型的指针。 
    include头文件则是将整个该头文件与使用到的地方关联起来。 

    使用class   类名一般是为了去除编译依赖,减少编译消耗的时

    #include "xx.h" 在编译的时候把xx.h文件直接展开,所以里面的接口都能用,可以申明对象。但是class xx;这种方式就不会,你只能使用它的指针或者引用,你不能创建申明对象。

  • 相关阅读:
    WCF Restful 服务 Get/Post请求
    网络共享做本地映射
    跨服务器存放文件(1)
    Socket通信简单实例(WCF调用Socket)
    HttpWebRequest传值
    实体对象,List泛型 转换为DataTable
    (转)打印相关_C#(PrintDocument、PrintDialog、PageSetupDialog、PrintPreviewDialog)
    (转)C#.NET WINFORM应用程序中控制应用程序只启动一次
    (转)C#操作Word文档
    (转)Java调用Weservice
  • 原文地址:https://www.cnblogs.com/lidabo/p/2810567.html
Copyright © 2011-2022 走看看