@Objective-c入門3( Rectangle類,類的繼承)

//
//    main.m
//    Rectangle And Squanre
//
//    Created by yg on 12-10-20.
//    Copyright (c) 2012年 yg. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Rectangle.h"
#import "Square.h"
#import "XYpoint.h"
#import "Circle.h"
#import "Triangle.h"
int main(int argc, const char * argv[])
{

        @autoreleasepool {
                
                // insert code here...
                NSLog(@"長方形");
                
                //rectangle類的使用
                Rectangle *testReatangle=[[Rectangle alloc] init];
                [testReatangle setWidth:4 heigh:3];
                NSLog(@"width=%i heigh=%i",[testReatangle width],[testReatangle heigh]);
                
                //Square類的使用
                Square *testSquare=[[Square alloc] init];
                [testSquare setSide:6];
                NSLog(@"Side=%i",[testSquare reSide]);
                
                
                //XYpoint的使用 創XYpoint對象 testXYpoint,然後賦給origin,再拿origin出來 賦給 testTwo
                XYpoint *testXYpoint=[[XYpoint alloc] init];
                [testXYpoint setX:5 Y:3];
                //創建一個座標 XYpoint類的對象testXYpoint,怎麼將這個賦值給對象rectangle的實例變量 對象origin?
                [testReatangle setOrigin:testXYpoint];
                
                XYpoint *testTwo=[[XYpoint alloc] init];
                
                testTwo=[testReatangle reOrigin];
                
                NSLog(@"X=%i,Y=%i",[testTwo x],[testTwo y]);
                
                //添加屬性標識以後 創建對象 myRect,myXYpoint,然後直接將myRect.origin=myXYpoint
                
                Rectangle *myRect=[[Rectangle alloc] init];
                XYpoint *myXY=[[XYpoint alloc] init];
                
                [myXY setX:100 Y:200];
                myRect.Origin=myXY;
                [myXY setX:50 Y:50];
                
                
                NSLog(@"x=%i,y=%i",[myRect.Origin x],[myRect.Origin y]);
                NSLog(@"x=%i,y=%i",myRect.Origin.x,myRect.Origin.y);//在XYpoint類裏面使用寄存器方法,直接訪問實例變量。
        
                //1.如果在setOrigin方法時候直接採用 參數傳值 myRct.Origin=f; 這傳的 f 是一個指針,這個指針指向採用方法時候 myXY
                //的內存空間,則再有f把這個指針地址傳向 Origin對象 ,origin存的也是指向myXY的內存空間的指針。所以當myXY改變其值X,Y時候,
                //用其他對象打印輸出的值也隨之改變。
                //2.要向對對象使用方法,則必須先 在開頭引用其類的 頭文件。@class沒有辦法使用[];
            
                //使用translate方法 傳對象座標相加。
                [myRect translate:myXY];
                NSLog(@"x=%i,y=%i",myRect.Origin.x,myRect.Origin.y);
                
                //增加了Circle類,Triangle類的使用測試
                
                Triangle *myTriangle=[[Triangle alloc] init];
                
                NSLog(@"三角形面積爲%i",[myTriangle getArea:2 :2]);
                NSLog(@"等邊三角形周長爲%i",[myTriangle getPerimeter:5]);
                                
        }
        return 0;
}

  1. 類有父類(超類),子類,子類繼承了父類的(實例變量+方法),然後子類有可以定義自己的(實例變量+方法),假如子類和父類繼承方法一樣名稱參數等等,則可以重載。
  2. 在屬於同一個父類的多個子類,屬於平行關係,如 Circle,Rectangle,Triangle,類,在對他們使用同一個名稱的方法時候,不同的類對象返回結果,方法內的運算過程都不一樣。這樣屬於多態。
  3. [類對象 方法名(帶參數)],其中編譯器首先會檢查 方法是否對應類對象 d


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章