zoukankan      html  css  js  c++  java
  • 【ObjectiveC】02.第一个OC语言类

    02.第一个OC语言类

    在java语言中,创建一个类只需要一个文件,而在oc语言中,创建一个类需要两个文件.m文件和.h文件。

    .h文件是声明类,用来声明成员变量和方法。用关键词@interface来修饰,以@end结尾。

    .m文件是实现类,用来实现成员变量和方法,用关键词@implementation来修饰,以@end结尾。

    方法:在oc语言中方法都需要用+或-来表明方法的类型。

    +表示的是静态方法。

    -表示的是动态方法。

    .h文件中的所有方法都是public,不能更改。

    成员变量:成员变量按作用域不同可以划分为:public   protected   private

    所有的类最后都会继承NSobject.

     

    Student.h文件

    #Import <foundation/foundation.h>    //该student类继承NSobject类,因此需要引用foundation框架下的foundation.h文件。

    @interface student :NSobject {        //声明student类然后继承自NSobject类。将成员变量放在{}当中

    Int age;                                         //一般会将成员变量的声明放在头文件当中,age的

    Int height;

     

    @public                                       //声明不同类型的成员变量

    Int weight;

    }

    @end

     

    Student.m文件

    #import“student.h”                           //必须引用该类的头文件,否则无法实现声明,就假设头文件是名字,工程文件是身体,没有名字就没有身体。

    @implementation student{                 //实现student类

     

    }

    @end

     

    添加方法

    为了保持面向对象的封装性,在java语言中,get方法和set方法都要用到getname和setname。在oc中,get方法需要用到与原名字同名的方法,例如age方法可以用age函数来获取age变量。

    #import <foundation/foundation.h>

    @interface student:NSobject{

    Int age;

    Int height;

    }                                                                                           //{}起始终止与成员变量

    -(int)age;                                                                         //age的get方法,返回值类型用(int)表示

    -(void)setage:(int)Newage;                                                 //无返回值,参数用:引出(int)为参数数据类型,形参名称为newage.返回值或者参数的类型都要用()包住。

    - (void)setage:(int)Newage andheight(int)Newheight;            //在oc中一个:对应一个参数,而且:也是方法名的一部分,因此方法名是setage:

    -(void)setage:(int)Newage andheight:(int)height;            // 增加一个方法可以同时操作age和height

     //方法名是setage:andheight:动态方法,无返回值,有两个参数,andheight可以省略。方法名可以是(void)setage:(int)Newage:(int)height;

     

    在student.m中的实现方法

    #import “student.h”

    @implementation student

     

    -(int)age{

     Return age;

    }

     

    -(void)setage:(int)newAge{

     Age=newAge;

    }

     

    @end

    Student.h和student.m都有了,这个student类就完成了,接下来就要用student类来创建一个实例。

     

    @Import <foundation/foundation.h>

    @import student.h

     

    int main(int argc, const char * argv[]){                 //在oc语言中,所有的对象存储类型都是指针,即开辟一块内存空间,然后存入相应的类型数据,然后用指针指向。

    @autoreleasepool{

       Student *stu=[[student alloc]init];                   //在oc语言中,[调用方法的主体 方法名]就可以调用方法了。在oc中创建对象,首先需要要用创建对象的类开辟一块内存空间,然后对类进行初始化,这样对象才可以使用。

      [stu release];//对象销毁

    }

    Return 0;

    }

    Student stu=[student alloc];                             //用student类型开辟了一段内存空间,并创建stu指针来指向这片内存空间。刚创建的内存空间没有经过初始化时无法使用的,必须初始化之后才能使用。

    Stu=[Stu init];                                              //将stu指针指向的那片内存空间初始化,并将初始化后的stu地址返回给指针。静态变量可以由类来调用。动态变量可以用对象来调用。

    因此在oc语言中调用方法实际上需要【调用方法主体 方法名】

    销毁对象,在方法调用结束之后,需要手动销毁对象。

    前面的stu调用了alloc和init等一些其他的方法,这些方法并不是因为调用了foundation.h文件,而是因为student的父类是NSobject,所以可以调用这些方法。

     

    在创立了student类的stu对象,如何调用这些方法和成员变量。

     1 import <Foundation/Foundation.h>

     2 #import "Student.h"

     3

     4 int main(int argc, const char * argv[])

     5 {

     6     @autoreleasepool {

     7         Student *stu = [[Student alloc] init];

    Stu->age=18; //只有成员变量是public的可以用指针的形式直接访问。

    [Stu setage:18];//受保护的成员变量可以通过set方法来调用。

    Int newage=[stu->age];

    Int newage=[stu age];

  • 相关阅读:
    东软中标清华大学一站式服务平台项目
    抢占DevOps制高点,东软UniEAP&SaCa平台强势崛起
    智慧监狱来了!SaCa EMM 助推现代监狱建设迈上新台阶
    移动金融办公威胁不断,这些坑千万别跳!
    比悲伤更悲伤的故事,那就是...
    这还是你见过的大学实验室吗?
    越智能?越危险?技术到底应不应该进步?
    新一代的IT实验室长啥样?
    产品“佩奇”闹元宵,新春点亮新网站
    危机四伏的千亿级金融放贷市场,我们能做什么?
  • 原文地址:https://www.cnblogs.com/lands/p/4718291.html
Copyright © 2011-2022 走看看