`
zhangziyangup
  • 浏览: 1186114 次
文章分类
社区版块
存档分类
最新评论

#include #import @class 讲解

 
阅读更多
#include
区分 #include <x.h>与#include "x.h"的作用
#include <x.h>:它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.
#include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。

在使用#include的时候要注意处理重复引用(这也是objc中#include与#import的区别)
例如:ClassA 与 ClassB同时引用了ClassC,不做重复引用处理的时候在ClassD中同时引用ClassA,ClassB编译会提示对ClassC重复引用的错误.
我们可以:#ifndef _CLASSC_H
#define _CLASSC_H
#include "ClassC"
#endif
这样处理在编译时就不会有重复引用的错误出现(在objc中#import解决了这个问题,这是它们的区别)

#import
#import 大部分功能和#include是一样的,但是他处理了重复引用的问题,我们在引用文件的时候不用再去自己进行重复引用处理.

@class
主要是用于声明一个类,告诉编译器它后面的名字是一个类的名字,而这个类的定义实现是暂时不用知道的,后面会告诉你.也是因为在@class仅仅只是声明一个类,所以在后面的实现文件里面是需要去#import这个类,这时候才包含了这个被引用的类的所有信息。

综上所述#include,#import与@class的区别可以做一下理解:

#include与#import在引用一个类的时候会包含这个类的所有信息包括变量方法等,但是这样做会对编译效率造成影响.比如有100个类都#import了ClassA,那么在编译的时候这100个类都会去对ClassA处理.又比如A被B引用,B被C引用,C被D引用.....此时如果A被修改,那么后面的B,C,D.....都需要重新进行编译.还有一个用法会引起编译错误的就是在ClassA中#import ClassB 在ClassB中#import ClassA那么在编译的时候也会出现未知错误。

所以一般来说,在interface中引用一个类,就用@class,它会把这个类作为一个类型来使用,而在实现这个interface的文件中,如果需要引用这个类的实体变量或者方法之类的,还是需要import这个在@class中声明的类。

原文:http://fei263.blog.163.com/blog/static/927937242012219103649197/

分享到:
评论

相关推荐

    qt调用JAVA文件示例

    本文将详细讲解如何在QT项目中调用JAVA文件,以实现与Android原生系统的交互。 首先,我们需要了解QT的QAndroidJniObject类,它是QT为与Android Java层交互提供的一种工具。QAndroidJniObject允许我们在C++代码中...

    jsp基础速成精华讲解

    ### jsp基础速成精华讲解 #### Servlet三个要素详解 **1. 必须继承自`HttpServlet`** - **目的**: `HttpServlet`类是Servlet接口的一个抽象实现类,它提供了一些默认的方法来处理HTTP请求。继承自`HttpServlet`...

    nagios分组出图代码实现讲解[2]

    print "@import url(include/js/calendar-blue.css);"; print "&lt;/style&gt;"; print "&lt;script type=\"text/javascript\" src=\"include/js/calendar.js\"&gt;&lt;/script&gt;"; print "&lt;script type=\"text/javascript\" src=\"...

    00000034_bean-include的用法.rar

    本篇将详细讲解`bean-include`的用法及其在实际开发中的应用。 首先,`bean-include`的概念源自于Spring的XML配置文件。在大型项目中,为了保持配置文件的整洁和可维护性,通常会将相关的Bean定义分散到不同的XML...

    ndk_r7_windows使用入门

    ### NDK R7 Windows 使用入门详解 ...需要注意的是,虽然本文以r7版本为例进行了讲解,但大部分步骤在后续版本中依然适用。在实际开发过程中,可能会遇到更多复杂的问题,需要不断学习和探索。希望本文能对你有所帮助。

    如何用cocos2d-x来开发简单的Uphone游戏:(四)

    本篇文章将详细讲解如何利用Cocos2d-x框架中的音频功能来为您的Uphone游戏增添音乐与音效,并进行一些最终的润色工作。在上一篇文章中,我们已经完成了游戏的基本原型构建,接下来我们将通过添加音效和背景音乐来...

    如何获取主机名和IP地址

    本篇文章将详细讲解如何在不同的操作系统环境下获取主机名和IP地址,并通过实例源码进行演示。 一、主机名 主机名通常由字母、数字和点组成,例如“mycomputer.example.com”。它包含了设备的名称和所属的域名。...

    QML 与 C++交互 - 02 C++暴露方法到QML

    本教程将详细讲解如何让C++的方法在QML中可调用,以实现更复杂的业务逻辑。 首先,我们需要创建一个C++类,该类将作为QML中的一个组件。这个类需要继承自`QObject`,因为只有`QObject`的子类才能被QML引擎识别和...

    CRichEditCtrl实现MSNQQ动画表情

    本文将详细探讨如何利用`CRichEditCtrl`来实现在聊天窗口中展示动画表情的功能,并具体讲解其中涉及到的关键技术点。 #### 技术背景 在Windows编程环境中,`CRichEditCtrl`是MFC框架提供的一种基于`Rich Edit ...

    VC 操作WORD 类

    本篇文章将详细讲解如何在VC++中创建一个Word文档类封装,以及具体实现过程。 首先,我们需要包含必要的头文件和库来启用COM支持。在`CreateWord.h`文件中,可能包含以下内容: ```cpp #include #include #...

    JSP语法格式 简单易懂的语法

    - **import**:声明要使用的包和类。 - **contentType**:设置页面返回内容的类型及编码方式。 - **session**:是否启用HTTP会话。 - **buffer**:输出缓冲区的大小。 - **autoFlush**:当输出缓冲区满时是否自动...

    VC++操作Excel的实例,包括读取写入以及遍历其Sheet

    本文将详细讲解如何使用VC++来操作Excel,包括读取、写入以及遍历Excel的Sheet,这对于开发需要与Excel交互的应用程序至关重要。 首先,要使用VC++操作Excel,我们需要引入Microsoft的Office自动化接口,这通常通过...

    对Django的restful用法详解(自带的增删改查)

    from django.urls import path, include from rest_framework.routers import DefaultRouter from . import views router = DefaultRouter() router.register(r'students', views.StudentList) urlpatterns ...

    Cheetah_users_guide.pdf

    class MyServlet(Cheetah.Template.Template): response_headers = [('Content-Type', 'text/html')] def respond(self): return str(self) ``` 这里定义了一个简单的 servlet,使用 Cheetah 模板引擎来生成响应...

    linux下C和java通过管道通信

    本篇将详细讲解如何利用管道实现在Linux下的C和Java程序之间的数据传递。 首先,让我们了解管道的基本概念。管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,通常是父子进程或...

    基于Django的博客系统.zip

    from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('blog/', include('blog.urls')), ] ``` ### 8. 模板 创建`blog/templates/blog/post_list.html`模板文件: ``...

    WebWork_Result

    本文详细介绍了WebWork框架中`WebWork_Result`配置文件的使用方法,重点讲解了`dispatcher`和`redirect`两种类型的`result`配置及其区别。通过这些知识点的学习,可以帮助开发者更好地掌握WebWork框架的核心机制,...

    Object-C_经典入门教程

    "程序入手,介绍了Objective-C的基本语法,比如`#import`指令,它相当于C语言中的`#include`,但更安全,能防止头文件重复导入。Objective-C中,`nil`是一个特殊值,可以接收消息,而不会导致程序崩溃,这与C/C++中...

    WEB程序设计-JSP(第3章 JSP语法).pdf

    - 其他属性还包括`import`(导入包)、`session`(是否启用会话管理)等。 - **include指令** - 在JSP页面中包含其他资源,如静态HTML文件或另一个JSP文件。 - 示例: ```jsp &lt;%@ include file="header.jsp" %&gt; ...

Global site tag (gtag.js) - Google Analytics