zoukankan      html  css  js  c++  java
  • oc基础2(继承与复合)

    继承:

     "Triangle.h"

    #import <Foundation/Foundation.h>

    @interface Triangle : NSObject

    @property double a;

    @property double b;

    @property double c;

    -(instancetype)initWithA:(double)a B:(double)b C:(double)c;

    -(double)area;

    @end

     "Triangle.m"

    #import "Triangle.h"

    @implementation Triangle

    -(instancetype)initWithA:(double)a B:(double)b C:(double)c

    {

        self=[super init];

        if (self)

        {   self.a=a;

            self.b=b;

            self.c=c;

            

        }

        return  self;

    }

    -(double)area

    {

        double s1=(self.a+self.b+self.c)/2;

        return sqrt(s1*(s1-self.a)*(s1-self.b)*(s1-self.c));

    }

    @end

    "TriangleB.h"

    #import "Triangle.h"

    @interface TriangleB : Triangle

    -(double)halfarea;

    @end

     "Triangle.m"

    #import "TriangleB.h"

    @implementation TriangleB

    -(double)halfarea

    {

        return [self area]/2;

    }

    @end

    "main.m"

    #import <Foundation/Foundation.h>

    #import "Triangle.h"

    #import "TriangleB.h"

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

        @autoreleasepool {

            

    //        Triangle *ta=[[Triangle alloc]init];

    //        ta.a=3.0;

    //        ta.b=4.0;

    //        ta.c=5.0;

        Triangle *ta=[[Triangle alloc]initWithA:3.0 B:4.0 C:5.0];//类同上4句,初始化变量;

           NSLog(@"%.2f ",[ta area]);

    //        TriangleB *tb=[[TriangleB alloc]init];

    //        tb.a=8.0;

    //        tb.b=6.0;

    //        tb.c=10.0;

            TriangleB *tb=[[TriangleB alloc]initWithA:8.0 B:6.0 C:10.0];

            NSLog(@"%.2lf ",[tb halfarea]);

            NSLog(@"%.2lf ",[tb area]);

            

            

        }

        return 0;

    }

    复合:

    在OC的复合模式就是把其他对象作为自身的题部分,以提升自身的功能。

    比如我现在要制作一台电脑,电脑需要CPU,显示器,鼠标和键盘等。这些东西的研发都是很复杂的过程。如果现在有成型的CPU等组件,就可以直接用这些组件攒一台电脑。复合模式就是这样。

    所有我们在制作电脑前要先找到这些组件。这些组件并不需要我们来制作,有专业的公司提供这些成型的组件。

     例子:

    在上题基础上,先建立”Triangle.h“、”Triangle.m”、”TriangleB.h“、”TriangleB.m”文件,再建立"Computer.h"和“Computer.m"文件

    "Computer.h"

    #import <Foundation/Foundation.h>

    #import "TriangleB.h"

    @interface Computer : NSObject

    @property  Triangle *aa;  //复合了Triangle类

    @property TriangleB *bb;  //复合了TriangleB类

    -(double)threea;   //自己的方法

    -(double)foura;    //自己的方法

    -(instancetype)initWithA:(double)a B:(double)b C:(double)c;//自定义初始化方法

    @end

     "Computer.m"

    #import "Computer.h"

    @implementation Computer

    -(instancetype)initWithA:(double)a B:(double)b C:(double)c//自定义初始化带参数

    {     self=[super init];

        if (self)

        {

             self.aa=[[Triangle alloc]initWithA:a B:b C:c];

            self.bb=[[TriangleB alloc]initWithA:a B:b C:c];

            

        }

        return self;

    }

    -(instancetype)init     //init初始化 不带参数

    {     self=[super init];

        if (self)

        {

            self.aa=[[Triangle alloc]init];

            self.bb=[[TriangleB alloc]init];

            

        }

        

        

        return self;

    }

    -(double)threea

    {

        return  [self.aa area]/3;

    }

    -(double)foura

    {

        return [self.bb halfarea]/2;

    }

    @end

     "main.h"

    //computer  复合(可以包含其他类,使用其他类的方法和变量,作为自己的一部分)

    #import <Foundation/Foundation.h>

    #import "Computer.h"

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

    {

       Computer *a=[[Computer alloc]init];//对象的init方法

        a.aa.a=3.0;

        a.aa.b=4.0;

        a.aa.c=5.0;

         NSLog(@"%.2lf ",[a.aa area]);  //实际上是Triangle类的area方法

     Computer *a1=[[Computer alloc]initWithA:3 B:4 C:5];//自定义对象的初始化方法

        NSLog(@"%.2lf ",[a1.aa area]);

        Computer *b=[[Computer alloc]init];

        b.bb.a=8.0;

        b.bb.b=6.0;

        b.bb.c=10.0;

        NSLog(@"[b.bb area]=%.2lf [b.bb half]=%.2lf [b foura]=%.2lf ",[b.bb area],[b.bb halfarea],[b foura]);//b.bb area是包含的a的area方法

        //b.bb halfarea 是包含b的halfarea方法 b foura是自己的方法

        Computer *b1=[[Computer alloc]initWithA:8 B:6 C:10];

        NSLog(@"[b.bb area]=%.2lf [b.bb half]=%.2lf [b foura]=%.2lf ",[b1.bb area],[b1.bb halfarea],[b1 foura]);

      

        return 0;

    }

  • 相关阅读:
    自定义控件小结进阶篇
    SQL注入语句 (很全)
    C# winform DataGridView 属性说明 [C# .NET]
    MDI窗体程序中防止子窗体被多次实例化——Singleton的C#实现
    精妙SQL语句大全
    sql语句
    注销时关闭当前窗体,返回登入界面
    C#中DataGridView的使用 [C# .NET]
    C#开发 WinForm中窗体显示和窗体传值相关知识
    HDU2553 (N皇后)
  • 原文地址:https://www.cnblogs.com/caomeixiangni-324/p/4702686.html
Copyright © 2011-2022 走看看