面向對象-類

代碼編寫函數

定義一個Car類,擁有2個屬性:輪子數、時速,1個行爲:跑spa

類名\屬性的命名規則:標示符的規則設計

類名的命名規範:有意義、駝峯標識、首字母大寫指針

#import <Foundation/Foundation.h>對象

// 類的聲明內存

@interface Car : NSObject編譯器

{io

    @public編譯

    int wheels; // 多少個輪子import

    int speed; // 時速

}

- (void)run; // 跑的行爲

@end

 

類的聲明02

成員變量 

@interface的大括號{}中聲明的變量:wheels、speed

@interface的大括號和函數的大括號是不同的

默認會初始化爲0 

@public

@public可讓Car對象的wheels和speed屬性被外界訪問

NSObject

加上:NSObject的目的是讓Car類具有建立對象的能力

 

類的實現

// 類的實現

@implementation Car

- (void) run

{

    NSLog(@"%i個輪子,%i時速的車子跑起來了", wheels, speed);

}

@end

建立對象01

// 主函數

int main()

{

    // 建立車子對象

    Car *c = [Car new];

    c->wheels = 3;

    c->speed = 300;

    

    [c run];

    return 0;

}

建立對象02

main函數的代碼分析、內存分析(對象在內存中有成員)

[Car new]每次都會建立出新的對象,而且返回對象的地址,那麼就應該用一個指針變量保存對象的地址

Car *c = [Car new];

用一個指針變量c指向內存中的Car對象 

設置車子對象的屬性

跟用指向結構體的指針訪問結構體屬性同樣,用->

c->wheels = 3;

c->speed = 300;

建立多個Car對象

分別只設置wheels、speed屬性

Car *c1 = [Car new];

c1->wheels = 4;

Car *c2 = [Car new];

c2->speed = 250;

[c1 run];

1個賦值給另外一個,而後修改屬性

Car *c1 = [Car new];

c1->wheels = 4;

c1->speed = 250;

Car *c2 = c1;

c2->wheels = 3;

[c1 run];

面向對象封裝的好處

更加接近人類的思考方式

只須要關注對象,不須要關注步驟

對象與函數參數

對象成員變量做爲函數參數

指向對象的指針做爲函數參數

修改指向指向對象的成員

修改指針的指向(指向某對象的指針即指針的指針)

 

@interface和@implementation的分工

 

@interface就好像暴露在外面的時鐘表面

@implementation就好像隱藏在時鐘內部的構造實現

 

常見錯誤

 

只有類的聲明,沒有類的實現

漏了@end

@interface和@implementation嵌套

兩個類的聲明嵌套

成員變量沒有寫在括號裏面

方法的聲明寫在了大括號裏面

語法細節

 

成員變量不能在{}中進行初始化、不能被直接拿出去訪問

方法不能當作函數同樣調用

成員變量\方法不能用static等關鍵字修飾,別跟C語言混在一塊兒(暫時忽略)

類的實現可用寫在main函數的後面,主要在聲明後面就好了

OC方法和函數的區別

 

OC方法只能聲明在@interface和@end之間,只能實如今@implementation和@end之間。也就是說OC方法不能獨立於類存在

C函數不屬於類,跟類沒有聯繫,C函數只歸定義函數的文件全部

低級錯誤:方法有聲明,可是實現的時候寫成了函數

OC的方法注意

方法只有聲明,沒有實現(經典錯誤)

方法沒有聲明,只有實現(編譯器警告,可是能調用,OC的弱語法)

編譯的時候:訪問沒有的成員變量直接報錯,訪問沒有的方法,只是警告

@implementation01

沒有@interface,只有@implementation,也是能成功定義一個類的

@implementation Car : NSObject

{

    @public

    int wheels; // 多少個輪子

    int speed; // 時速

}

- (void) run

{

    NSLog(@"%i個輪子,%i時速的車子跑起來了", wheels, speed);

}

@end

@implementation02

@implementation中不能聲明和@interface同樣的成員變量

不帶參數的方法01

設計一個返回PI的方法

帶一個參數的方法01

設計一個計算平方的方法

帶多個參數的方法01

設計一個計算和的方法

方法名注意

冒號也是方法名的一部分

同一個類中不容許兩個對象方法同名

屬性訪問

[Car  new]->speed = 200;

方法調用

[ [Car  new]  run];

相關文章
相關標籤/搜索