c++中使用include和直接写class类名的区别
2015-04-22 16:43
225 查看
在写 头文件的时间 经常会
有一些 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文件直接展开,所以里面的接口都能用,可以申明对象。但是classxx;这种方式就不会,你只能使用它的指针或者引用,你不能创建申明对象。
来自:http://blog.sina.com.cn/s/blog_8e5c2c1901012pgu.html
有一些 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文件直接展开,所以里面的接口都能用,可以申明对象。但是classxx;这种方式就不会,你只能使用它的指针或者引用,你不能创建申明对象。
来自:http://blog.sina.com.cn/s/blog_8e5c2c1901012pgu.html
相关文章推荐
- C++使用初始化清单和直接在构造函数内初始化成员变量的区别
- C++使用初始化清单和直接在构造函数内初始化成员变量的区别
- C++成员函数实现在类定义中与在类定义外的区别(Windows下直接使用g++)
- 浅谈Linux配置定时,使用crontab -e与直接编辑/etc/crontab的区别
- c++调用类内部使用成员变量和inline函数的区别
- C++中lib 和 dll 的区别、生成以及使用详解
- C++使用new和不使用new创建对象区别
- php使用include 和require引入文件的区别
- malloc/free和new/delete的主要区别以及c与c++关于结构体定义使用的区别
- C++中include头文件使用""与<>的区别
- C++中两种include的用法区别
- C++ #include <iostream> #include <iostream.h> #include <string.h>区别及作用
- Linux配置定时,使用 crontab -e 与 直接编辑 /etc/crontab 的区别
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- c/c++中#include <>与#include""区别
- C++第一个程序-include使用尖括号和双引号的场景
- const 在C C++ 中的使用 和 区别-----------整理自网络
- C++:LIB和DLL的区别与使用
- #include<iostream>和#include<iostream.h>区别使用
- 如题,既然直接对一个实例发送方法名就可以调用这个方法,那为什么还要使用performSelector:去调呢?两者u有啥区别