zoukankan      html  css  js  c++  java
  • 类与对象

     

    #import <Foundation/Foundation.h>

     

    //面向过程,C语言是偏向面向过程编程的语言,C语言也可以实现面向对象编程,如:操作系统底层代码实现,很多都用了面向对象的编程思想

    //面向过程的程序设计,把事物按照事物的发展过程,分成很多执行步骤,每一步都用函数实现,通过函数的调用实现对应的功能

    //五子棋

    //1.显示棋盘

    //2.黑子先下

    //3.判断输赢

    //4.显示棋盘

    //5.白子下棋

    //6.判断输赢

    //7.显示棋盘

    //8.返回第二步

    //9.赢棋结束

     

    //面向对象编程

    //把事物分成很多个对象,每一个对象都有对应的描述方法,对象之间通过发送消息进行通信,最终实现面向对象的程序设计

    //1.棋盘对象

    //2.黑白双方

    //3.下棋规则

     

    //首先是黑白双方接受终端输入下棋,发送消息给棋盘对象显示棋盘,棋盘对象发送消息给下棋规则对象,下棋规则对象判断输赢,没有赢发送消息给黑白双方

     

    //类与对象

    //从生活逻辑上

    //人类     章子怡 奥巴马 张兆帅

    //dog类    xiaoHei  xiaoBai

    //电脑类    我桌子上这台  你桌子上那台

     

    //从封装的角度上

    //结构体: 封装数据类型

    //函数:封装实现功能的方法

    //类: 既封装了数据类型,又封装对应的实现方法

     

    //可以把类看成一个升级版的结构体

    //对象就是类定义的实例  Person *xiaoHong

     

    //对象既封装了数据类型,又封装了实现方法

     

    //从编程角度看

    //对象就是类定义的变量

     

    //官方定义

    //类: 具有相同特征事物的统称

    //对象: 类的实例化

     

    //实例与方法

    //把对象也叫着实例, 对象就是类的实例化

    //操作对象的方法叫着实例方法

    //

    //[mycar drive];

    //[mycar wash];

     

    //[userText write];

    //[userText read];

    //[windows erase];

    //[word  reloade];

     

    //instance 实例(对象)

    //instance variable 实例变量

     

    //类的声明

    @interface Student : NSObject //Student类继承与NSObject类, 类名首字母大写,Student是类名

    {

        int _age;//实例变量以_开头 习惯使然 也符合标示符命名规范

        NSString *_name;

    }

     

    //构造方法

    //返回值为id类型 方法名: init

    - (id)init; //-表示对象方法,给对象调用 +表示类方法,给类本身调用

    //id 类似与 C语言 void * 相当于泛型指针

     

    //setter方法

    //返回值: void  方法名: setAge: 形式参数: newAge

    - (void)setAge:(int)newAge;

    - (void)setName:(NSString *)newName;

    //返回值: void 方法名: setAge:andName: 形式参数: newAge newName;

     

    - (void)setAge:(int)newAge andName:(NSString *)newName;

     

    //方法名: setAge::

    //- (void)setAge:(int)newAge :(NSString *)newName;

     

     

    //getter方法

     

    - (int)getAge;

    - (NSString *)getName;

     

    //打印对象方法

     

    - (void)print;

     

    //类方法

     

    + (void)test;

     

    @end

     

    //类的实现

     

    @implementation Student  //OC中的关键字都是以@开头

     

    - (id)init //重写父类的构造方法

    {

        self = [super init];//指向自己的对象指针 super是调用父类对象的关键字,相当于一个编译器符号, 先使用父类的构造方法构造对象返回

        if (self) {//判断父类方法是否调用成功

            _age = 12;

            _name = @"xiaohong";

        }

        return self;

    }

     

    //setter方法实现

    //在当前类中,可以直接访问类中的实例变量,直接访问实例变量的方法有两种

    //1.通过实例变量名直接访问

    //2.通过 self指针直接访问

     

    - (void)setAge:(int)newAge

    {

        self->_age = newAge;

    }

     

    - (void)setName:(NSString *)newName

    {

        _name = newName;

    }

     

    - (void)setAge:(int)newAge andName:(NSString *)newName

    {

        _age = newAge;

        _name = newName;

    }

     

    //getter方法实现

     

    - (int)getAge

    {

        return _age;

    }

     

    - (NSString *)getName

    {

        return _name;

    }

     

    - (void)print

    {

        NSLog(@"name is %@, age is %d", _name,_age);

    }

     

    //NSLog类似于C语言中printf

    //%@ 打印对象

    //NSLog自动换行

     

    //测试当前类是否可用

    + (void)test

    {

        Student *xiaoFei = [[Student alloc] init];

        [xiaoFei setAge:20 andName:@"小非"];

        NSLog(@"name is %@ , age is %d", [xiaoFei getName],[xiaoFei getAge]);

    }

    @end

     

     

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

        @autoreleasepool {

    //        //1.用类创建一个对象

    //        //xiaoHong 是对象指针变量  alloc申请的内存空间是对象

    ////        Student * xiaoHong = [Student alloc];//通过alloc方法创建对象

    ////        

    ////        xiaoHong = [xiaoHong init];

    //        Student *xiaoHong = [[Student alloc] init];

    //        

    //        //NSLog(@"%p %ld", xiaoHong,sizeof(xiaoHong));

    //        

    //        [xiaoHong print];

    //        

    //        [xiaoHong setAge:20 andName:@"小红"];

    //        [xiaoHong print];

    //        

    //        NSLog(@"名字:%@ 年龄: %d", [xiaoHong getName],[xiaoHong getAge]);

            

            [Student test];//利用类名调用类方法

            

        }

        return 0;

    }

     

     

     

    、、、、、、、、、、、、、、、、、、、、、、、、、、、分割线、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    以下程序顺序:main.m  --> .h -->.m

    、、、、、、、、、、、、、、、、、、、、、、、、、、、分割线、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    #import <Foundation/Foundation.h>

    #import "Person.h"//使用 import包含

    //C与OC区别

    //1.C语言包含头文件用include OC用import

    //2.C语言为了防止头文件的重复包含 用#ifndef #define #endif

    //OC语言不需要考虑这一点@class 防止循环包含

    //3. OC的文件用.m C语言用.c

    //4. OC语言的关键字用@开头

    //5. OC语言完全兼容C语言

     

     

     

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

        @autoreleasepool {

            

            [Person testPerson];

            

            

        }

        return 0;

    }

     

     

     

    #import <Foundation/Foundation.h>

     

    @interface Person : NSObject

    {

        float _weight;

        float _height;

        NSString *_name;

    }

    //构造方法

    - (id)init;

     

    //setter方法

     

    - (void)setWeight:(float)newWeight;

     

    - (void)setHeight:(float)newHeight;

     

    - (void)setName:(NSString *)newName;

     

    - (void)setWeight:(float)newWeight andHeight:(float)newHeight andName:(NSString *)newName;

     

    //getter

     

    - (float)weight;//习惯使然

    - (float)height;

    - (NSString *)name;

     

    //打印方法

     

    - (void)printPersonInformation;//OC中的命名规范,首字母小写,以后每个单词的首字母大写 "驼峰规则"

     

    //类方法

    + (void)testPerson;

     

    @end

     

     

     

    #import "Person.h"

     

    @implementation Person

     

    - (id)init

    {

        self = [super init];

        if (self) {

            _name = @"小红";

            _height = 165.5;

            _weight = 54.6;

        }

        return self;

    }

     

    - (void)setWeight:(float)newWeight andHeight:(float)newHeight andName:(NSString *)newName

    {

        _weight = newWeight;

        _height = newHeight;

        _name = newName;

    }

     

    - (NSString *)name

    {

        return self->_name;

    }

     

    - (float)weight

    {

        return self->_weight;

    }

     

    - (float)height

    {

        return self->_height;

    }

     

    - (void)printPersonInformation

    {

        NSLog(@"name is %@  weight is %.2f height is %.2f", [self name], [self weight], [self height]);//通过self指针调用对应的方法

    }

     

    + (void)testPerson

    {

        Person *xiaoHua = [[Person alloc] init];

        [xiaoHua setWeight:67.8 andHeight:175.4 andName:@"小华"];

        NSLog(@"name is %@, weight is %.2f height is %.2f", [xiaoHua name], [xiaoHua weight], [xiaoHua height]);

    }

     

    @end

     

     

     

    、、、、、、、、、、、、、、、、、、、、、、、、、、、、分割线、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    构造方法

    #import <Foundation/Foundation.h>

    #import "Dog.h"

     

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

        @autoreleasepool {

            //Dog *dog = [[Dog alloc] init];//把对象空间清0

            [Dog testDog];

            

        }

        return 0;

    }

     

     

    #import <Foundation/Foundation.h>

     

    @interface Dog : NSObject

    {

        int _age;

        NSString *_name;

    }

     

    //构造方法

    //- (id)init;

    //必须以initWithXXX开头

     

    - (id)initWithAge:(int)newAge;

     

    - (id)initWithName:(NSString *)newName;

     

    - (id)initWithAge:(int)newAge andName:(NSString *)newName;

     

    //setter方法

     

    - (void)setAge:(int)newAge andName:(NSString *)newName;

     

    //getter方法

    - (int)age;

    - (NSString *)name;

     

    //打印方法

    - (void)printDogInfomation;

     

    + (void)testDog;

     

    @end

     

     

     

    #import "Dog.h"

     

    @implementation Dog

     

    - (id)init

    {

        self = [super init];//super是调用父类的关键字, 先用父类的方法初始化

        if (self) {//初始化失败返回nil 类似于C语言中的NULL  (void *)0

            self->_age = 12;

            self->_name = @"xiaoHei";

        }

        return self;

    }

     

    - (id)initWithAge:(int)newAge

    {

        if (self = [super init]) {

            self->_age = newAge;

        }

        return self;

    }

     

    - (id)initWithName:(NSString *)newName

    {

        if (self = [super init]) {

            self->_name = newName;

        }

        return self;

    }

     

    - (id)initWithAge:(int)newAge andName:(NSString *)newName

    {

        if (self = [super init]) {

            self->_age = newAge;

            self->_name = newName;

        }

        return self;

    }

    - (void)setAge:(int)newAge andName:(NSString *)newName

    {

        _age  = newAge;

        _name = newName;

    }

     

    - (int)age

    {

        return _age;

    }

     

    - (NSString *)name

    {

        return _name;

    }

     

    - (void)printDogInfomation

    {

        NSLog(@"name : %@, age : %d", [self name], [self age]);

    }

     

    + (void)testDog

    {

        Dog *dog1 = [[Dog alloc] init];

        //[dog1 setAge:12 andName:@"小黑"];

        NSLog(@"dog name is %@ dog age is %d", [dog1 name], [dog1 age]);

        Dog *dog2 = [[Dog alloc] initWithAge:30 andName:@"xiaoBai"];

        [dog2 printDogInfomation];

        

    }

     

    @end

     

     

    、、、、、、、、、、、、、、、、、、、、、、、、、分割线、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    类方法

    #import <Foundation/Foundation.h>

    #import "Dog.h"

     

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

        @autoreleasepool {

            [Dog testDog];

           Dog *dog = [Dog creatDogWithName:@"xiaoHuang" andAge:20];

            [dog print];

        }

        return 0;

    }

     

     

    #import <Foundation/Foundation.h>

     

    @interface Dog : NSObject

    {

        int _age;

        NSString *_name;

    }

     

    - (id)initWithName:(NSString *)newName andAge:(int)newAge;

     

    - (void)setName:(NSString *)newName andAge:(int)newAge;

     

    - (NSString *)name;

    - (int)age;

     

    - (void)print;

     

    + (id)creatDogWithName:(NSString *)newName andAge:(int)newAge;

     

     

    + (void)testDog;

     

    @end

     

     

    #import "Dog.h"

     

    @implementation Dog

     

    - (id)initWithName:(NSString *)newName andAge:(int)newAge

    {

        if (self = [super init]) {

            _name = newName;

            _age = newAge;

        }

        return self;

    }

     

    - (void)setName:(NSString *)newName andAge:(int)newAge

    {

        _name = newName;

        _age = newAge;

    }

     

    - (NSString *)name

    {

        return _name;

    }

     

    - (int)age

    {

        return _age;

    }

     

    - (void)print

    {

        NSLog(@"name is %@, age is %d", [self name], [self age]);

    }

     

    //类方法给类调用的

    //用类名调用

    + (void)testDog

    {

        id dog = [[self alloc] initWithName:@"xiaoHei" andAge:12];//self 指向调用的类

        [dog print];

    }

     

    + (id)creatDogWithName:(NSString *)newName andAge:(int)newAge

    {

        id dog = [[self alloc] init];

        

        [dog setName:newName andAge: newAge];

        

        return dog;

    }

     

    @end

     

    、、、、、、、、、、、、、、、、、、、、、、、、、、、分割线、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    #import <Foundation/Foundation.h>

    #import "Adder.h"

     

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

        @autoreleasepool {

            // insert code here...

            //

            //NSLog(@"Hello, World!");

            [Adder testAdder];

            

        }

        return 0;

    }

     

     

    #import <Foundation/Foundation.h>

     

    @interface Adder : NSObject

     

     

    + (int)addA:(int)a andB:(int)b;

     

    + (void)testAdder;

     

    @end

     

     

    #import "Adder.h"

     

    @implementation Adder

     

    + (int)addA:(int)a andB:(int)b

    {

        return a+b;

    }

     

    + (void)testAdder

    {

        int a, b;

        scanf("%d %d",&a, &b);

        NSLog(@"sum = %d",[self addA:a andB:b]);

    }

    @end

     

     

    、、、、、、、、、、、、、、、、、、、、、、、、、、、、分割线、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    单例类

    #import <Foundation/Foundation.h>

    #import "Dog.h"

    //单例类

    //单例类创建的对象只有一份

    //实现多个对象指针共享数据

     

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

        @autoreleasepool {

            //NSFileManager *file = [NSFileManager defaultManager];

    //        Dog *dog1 = [[Dog alloc] init];

    //        Dog *dog2 = [[Dog alloc] init];

    //        Dog *dog3 = [[Dog alloc] init];

    //        

    //        NSLog(@"dog1 = %p", dog1);

    //        NSLog(@"dog2 = %p", dog2);

    //        NSLog(@"dog3 = %p", dog3);

     

            //单例

            

            Dog *dog1 = [Dog defaultDog];

            Dog *dog2 = [Dog defaultDog];

            Dog *dog3 = [Dog defaultDog];

            NSLog(@"dog1 = %p", dog1);

            NSLog(@"dog2 = %p", dog2);

            NSLog(@"dog3 = %p", dog3);

            

            

        }

        return 0;

    }

     

     

    #import <Foundation/Foundation.h>

     

    @interface Dog : NSObject

     

    //必须以default开头

    //+ (NSFileManager *)defaultManager;

     

    + (Dog *)defaultDog;

     

    @end

     

     

     

    #import "Dog.h"

     

    static Dog *dog=nil;

     

    @implementation Dog

     

    + (Dog *)defaultDog

    {

        if (!dog) {

            dog = [[self alloc] init];

        }

        return dog;

    }

     

     

     

    @end

     

     

     

     

     

     

     

     

     

     

     

    让明天,不后悔今天的所作所为
  • 相关阅读:
    【leetcode】1215.Stepping Numbers
    【leetcode】1214.Two Sum BSTs
    【leetcode】1213.Intersection of Three Sorted Arrays
    【leetcode】1210. Minimum Moves to Reach Target with Rotations
    【leetcode】1209. Remove All Adjacent Duplicates in String II
    【leetcode】1208. Get Equal Substrings Within Budget
    【leetcode】1207. Unique Number of Occurrences
    【leetcode】689. Maximum Sum of 3 Non-Overlapping Subarrays
    【leetcode】LCP 3. Programmable Robot
    【leetcode】LCP 1. Guess Numbers
  • 原文地址:https://www.cnblogs.com/-yun/p/4279229.html
Copyright © 2011-2022 走看看