一、類和對象,,類對象

來源:互聯網
上載者:User

一、類和對象,,類對象
1.介面部分:對外聲明類的行為和特徵(類的定義分為:介面部分和實現部分)① @interface 介面關鍵字:用於表示這是一個類的介面部分     介面部分功能:是定義類的靜態特徵和聲明動態行為     @end 作為結束標誌          對外介面:通過介面就可以在不知道實現的情況下,瞭解這個類有什麼      Person:類名,每一個類都要起一個名字。首字母大寫(類:對象的類型)     NSObject:父類@interface Person: NSObject②靜態特徵:執行個體變數③執行個體變數必須在花括弧中④建立執行個體變數的時候不能被賦值⑤在建立執行個體變數的時候,執行個體變數錢加“_”:系統這樣寫;區分;{     ⑤執行個體變數的可見度     《1》內部:類的實現部分使用執行個體變數     《2》外部:不在實現部分使用     《3》@public範圍:外部、內部、繼承     《4》@protected(系統預設)範圍:內部、繼承     《5》@private範圍:內部     //添加當前類屬性
     @public//作用範圍是直到下一個結束或者執行個體變數結束     NSString *_name;     NSInteger _age;      @protected     CGFloat _height;      @private     CGFloat _weight;
} //動態行為:方法(添加類的行為)- (void)sayHi; @end2.實現部分:類行為的具體實現(方法的實現)①@implementation:關鍵字,表示類的實現部分     Person:類名,表示實現的是哪個類     @end:類 結束實現標誌@implementation Person - (void)sayHi{     NSLog(@“Hello World”);
} @end3.使用類建立對象。Objective-C中建立的對象,全部放在堆區(對象:類的執行個體)int main(){     @autoreleasepool{          ①申請空間          儲存空間地址          《1》記憶體配置 (alloc方法:用於分配記憶體空間)          Person *p = [Person alloc];          《2》對象初始化(init方法:用於初始化對象),將記憶體空間資料清零          p = [p init];           《3》將建立對象的《1》和《2》合成一步          Person *p1 = [[Person alloc] init];           ②使用成員變數          p1->_age = 10;          p1->_name = @“貝爺”;           ③使用方法          [p1 sayHi];
     }     return 0;
}4.類是對一類具有相同事物行為和特徵事物的抽象5.封裝、繼承、多態①封裝:將現實世界中存在的某個客體的屬性與行為綁定在一起,並放置在一個邏輯單元內②繼承:子類自動共用父類資料結構和方法的機制,這是類之間的一種關係③多態:指相同的操作或函數、過程可作用於多種類型的對象上並獲得不同的結果6.@class的作用:只是表示有Girl這麼一個類型,其他的什麼都沒做。在什麼地方使用Girl這個類時,再匯入Girl.h注意:我們一般選擇在.h中使用@class,在.m中引入標頭檔7.組合類別的使用:(指標儲存物件的首地址,代指對象。OC中使用指標代指對象,進行操作)①Mother.h#import <Foundation/Foundation.h>

@interface Mother : NSObject
{
    @public
    NSString *_name;
}@end②Father.h#import <Foundation/Foundation.h>

@interface Father : NSObject
{
    @public
    NSString *_name;
}

@end③Child.h#import <Foundation/Foundation.h>

@interface Child : NSObject
{
    @public
    NSString *_name;
}@end④Family.h#import <Foundation/Foundation.h>#class Father;#class Mother;#class Child;
@interface Family : NSObject
{
@public
    Father *_f;
    Mother *_m;
    Child  *_c;
}

@end⑤main.m        Father *father = [[Father alloc]init];
        father->_name = @"父親";
        Mother *mother = [[Mother alloc] init];
        mother->_name = @"母親";
        Child *child = [[Child alloc] init];
        child->_name = @"孩子";
        Family *family = [[Family alloc] init];
        family->_f = father;
        family->_m = mother;
        family->_c = child;        NSLog(@"%@ %@ %@ ",family->_f->_name,family->_m->_name,family->_c->_name);8.列印字串用“%@”做預留位置。用”[]”調用方法有列印,沒有控制台輸入9.①面向過程:編程以事件(任務)為中心,程式圍繞事件,列出了事件的每個步驟,一步一步完成(側重點:實現功能 C)②物件導向:編程以事物為中心,程式圍繞事物展開,完成事件只是一個小任務(側重點:對象的特徵 OC,C++,java)10.Objective-C中的幾種方法①“-”執行個體方法:由類的執行個體來執行。換言之,在調用執行個體方法之前,必須先建立該類的執行個體。執行個體方法是最常見的方法類型(方法只能對象使用)樣本:- (instancetype)init;// 有參(1個參)無傳回值
// 冒號屬於方法名的一部分
// 方法名:printNum:
- (void)printNum:(NSInteger)num;
// 有兩個參數
// 方法名:printName:age:
- (void)printName:(NSString *)name age:(NSInteger)age;

//有三個參數
//方法名:printName:age:score:- (void)printName:(NSString *)name age:(NSInteger)age score:(CGFloat)score;②“+”類方法:可由它所在的類直接執行。它不需要對象的執行個體作為訊息的接收者(方法只能被類使用)樣本:+ (instancetype)alloc;註:類方法中不能使用執行個體變數11.instancetype和id區別①instancetype可以返回和方法所在類相同類型的對象,id只能返回未知類型對象。②instancetype只能作為傳回值和參數,id還可以用來定義變數③instancetype會告訴編譯器當前的類型,但id對編譯器卻是無類型的,調用任何方法不會給出錯誤提示④對於init方法,id和instancetype是沒有區別的。因為編譯器會把id最佳化成instancetype。當明確返回的類型就是當前class時,使用instancetype能避免id帶來的編譯不出錯誤的情況。12.如何擷取方法名①刪除:類型標識,傳回型別,參數類型,參數名,空格。樣本:replaceObjectAtIndex:withObject注意:類中不能出現同名方法;“:”標識參數,不能省略。有冒號必須有參數;冒號屬於方法名的一部分。13.在OC中使用訊息發送機制:[receiver message]表述:①給receiver對象發送message訊息②receiver接收到訊息,即方法getSalary③receiver找到message方法,並執行14.setter和getter方法①在OC中,為單一執行個體變數賦值的方法稱作setter(設定器)②擷取單一執行個體變數值得方法稱作getter(訪問器)15.setter和getter方法的書寫格式給執行個體變數:NSInteger _age;①setter的書寫格式:- (void)setAge:(NSInteger)age;即set+首字母大寫的執行個體變數名(忽略底線)②getter的書寫格式:- (NSInteger)age;j即傳回值類型與變數類型一致,方法名與執行個體變數名相同(忽略底線)16.setter和getter與執行個體變數的關係①無論setter還是getter內部操作的是執行個體變數②每一個執行個體變數都需要一對setter和getter方法17.setter和getter的實際操作①Person.h#import <Foundation/Foundation.h>

//類的介面部分
/*
 1.定義一個類
 2.添加當前類屬性(特徵)
 3.添加當前類行為(方法)
 */
@interface Person : NSObject
{
    //大括弧內部,添加當前類屬性
    //字串類型
    NSString *name;//姓名,NSString同樣是一個類
    //整型
    NSInteger age;//年齡,NSInteger是數實值型別,不是一種類
    //字串類型
    NSString *gender;//性別
}
//初始化方法
//希望通過初始化方法,能夠獲得一個Person類的執行個體對象,並且希望該對象具有自己的姓名屬性
- (id)initWithName:(NSString *)_name;

//大括弧外部,添加當前類行為
- (void)sayHi;

//設定器 setter
- (void)setName:(NSString *)_name;
- (void)setAge:(NSInteger)_age;
- (void)setGender:(NSString *)_gender;

//訪問器 getter
- (NSString *)getName;
- (NSInteger)getAge;
- (NSString *)getGender;

@end②Person.m#import "Person.h"

@implementation Person

- (id)initWithName:(NSString *)_name{

    //1.原始初始化,也就是將記憶體內的變數置零
    self = [super init];//將init方法發送給super對象
    //2.原始初始化成功之後,需要設定當前對象的姓名為形參
    if (self != nil) {
        name = _name;
    }
    //3.返回當前對象
    return self;
}

//大括弧外部,添加當前類行為
- (void)sayHi{
   
    //NSLog將字串列印在控制台進行輸出,類似於printf();
    NSLog(@"hello world");
}

//設定器 setter
- (void)setName:(NSString *)_name{
    //設定給當前對象的屬性
    name = _name;
}
- (void)setAge:(NSInteger)_age{
    age = _age;
}
- (void)setGender:(NSString *)_gender{
    gender = _gender;
}

//訪問器 getter
- (NSString *)getName{
    //訪問當前對象的屬性
    return name;
}
- (NSInteger)getAge{
    return age;
}
- (NSString *)getGender{
    return gender;
}@end③main.m#import <Foundation/Foundation.h>
#import "Person.h"//引入類名字int main(int argc, const char * argv[]) {    //1.建立Person類的執行個體對象
    Person *person = [[Person alloc] initWithName:@"Lewis"];//用【】調用方法
    //2.給person發送執行個體訊息sayHi
    [person sayHi];
   
    //修改name,添加設定器(setter)與訪問器(getter)
    /*
     類名    屬性名稱  設定器方法名 訪問器方法名
     Person  name  -setName:   -getName
     */
   
    //3.先列印當前person執行個體對象的姓名是什麼
    NSLog(@"person's name is %@",[person getName]);
   
    //4.修改當前person執行個體對象的姓名,修改成jack
    [person setName:@"Jack"];
    NSLog(@"person's name is %@",[person getName]);
   }18.點文法(只對getter setter有效)s.name = @"小白";NSLog(@"%@",s.name);       [s setAge:12];NSLog(@"%ld",[s age]);s.score = 99.99;NSLog(@"%.2f",s.score);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.