oc面向对象

OC面向对象之方法 OC面向对象之方法 设计一个Caculator计算器类,它拥有计算的功能(行为) 1不带参数的方法 设计一个返回PI的方法 //方法声明 -(double)pi; //方法实现 -(double) pi {   return 3.1415926; } 方法声明   方法调用 2带一个参数的方法     设计一个计算平方的方法 //方法声明 - 阅读详情

OC面向对象:

封装,继承,多态,类方法,以及弱语法!!

main.m:

<pre name="code" class="objc">//
//  main.m
//  oc-面向对象
//
//  Created by stevenchang on 9/14/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"
#import "Teacher.h"
#import "Person.h"
#import "JiSuanQI.h"
#import "Dog.h"
#import "QQCar.h"

int main(int argc, const char * argv[]) {
    /**
     1.面向对象的封装特性:
        作用:
            对数据进行预处理;
            避免外部对象随意调用属性,保证数据的安全性;
            可以方便统一操作数据
     */
    
    //创建一个Student对象
    Student *stu = [[Student alloc] init];
    
    //设置年龄
    //private
    [stu setAge:-2];
    [stu setAge:3];
    
    //设置体重
    //public
    stu->weight = 20;   //weight是public的,通过此种方式可以直接为weight赋值
    
    //设置身高
    [stu setHeight:-3.0];
    
    NSLog(@"此时学生的年龄为:%d", stu.age);
    NSLog(@"此时学生的年龄为:%d", [stu age]);
    
    NSLog(@"此时学生的体重为%f",stu.weight);
    
    NSLog(@"此时学生的身高为:%f", stu.height);
    
    /**
     OC 弱语法:
        没有申明和实现的方法只是警告
     oc中的方法是动态检测: 在运行过程中才会检测对象有没有实现相应的方法
     */
    Person *person = [[Person alloc] init];
    [person function];
//    [person hahah];    //在Xcode6.2中,如果类的声明中相应的函数的声明,编译器会自动进行提示说明
//    [person function1];   //没有声明,只有实现,运行时也会出错,编译和链接时只会出现警告
    //[person function2];   //只有声明没有实现在,运行时会出现错误,编译和链接时只会出现警告
    
    /*
     * self的用法
     * 1> self 指向当前调用者
     * 2> self对象方法中,表示对象;在类方法中,表示类
     * 3> self可以访问成员变量
     */
    Teacher *tea = [[Teacher new] init];    //创建一个Teacher对象
    [tea test];
    [Teacher test];    //这是调用类方法
    [tea test1];
    [Teacher test2];
    
    /**
     类方法:
     + 表示是类方法
     类方法不需要创建对象,类方法只能由类来调用[类名  方法名]
     类方法中不能访问成员变量
     类方法的执行效率比对象方法高,再oc开发中能用类方法尽量使用类方法
     当方法中不需要使用成员变量时,改用类方法
     */
    int total = [JiSuanQI countTotalNum1:2 addNum2:89];
    int average = [JiSuanQI averageNumd1:2 andNum2:8];
    NSLog(@"和为%d,平均值为%d",total, average);
    
    /**
     继承
     避免重复代码,对于父类中的方法,可以直接使用
     继承中我们还会经常使用一个关键字:super
     super可以用于调用父类中的方法
     super指向当前调用者的父类
     - 在对象方法中,则调用父类中对应的对象方法;
     + 在类方法中,则调用父类中对应的类方法
     */
    QQCar *qq = [QQCar new];    //创建一个QQ对象
    [qq setPrice:23.4];
    [qq setWheel:4];
    
    //num1为public,num2为private
    //可以发现,对于子类来说,可以直接访问父类中public的成员变量,
    //不能访问private,protected的成员变量
//    qq->num1;
//    qq->num2;
    //因此对于子类来说,子类不是能够完全使用父类的成员变量,但是可以完全使用方法
    [QQCar test];    //此test是父类中的类方法,使用子类直接可以进行调用
    NSLog(@"车子的价格为%f,轮子为%d",qq.price, qq.wheel);
    
    /**
     多态:  没有继承就没有多态,具有多种形态,例如:狗,既是狗也是动物
     可以用一个父类指针变量指向多个子类对象
     父类类型的变量是不能直接调用子类特有的方法,编译器会发生警告,必须强转为子类对象
     */
    Dog *dog = [Dog new];
    [dog eat];
    
    //Dog也是Animal类型,这个时候是动态绑定aa指向的真实对象
    Animal *ani = [Dog new];
    [ani eat];
    //使用强制类型转换对ani进行类型转换
    Dog *d = (Dog *)ani;
    [d eat];
    return 0;
}




Student.h

//
//  Student.h
//  oc-面向对象
//
//  Created by stevenchang on 9/14/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

//引用了Foundation.h框架
#import <Foundation/Foundation.h>

//类的声明
@interface Student : NSObject
{
    int no;   //默认是protected,外界无法直接操纵属性
    @public
    float weight;
    @private
    int age;
    @protected
    //这里写类的属性,默认是@protect,需要提供setter和getter方法
    double height;
    
}

//对象方法,- 开头(返回值类型)函数名:......
- (void)setAge:(int)newAge;     //函数的声明
- (int)age;       //函数的声明

- (float)weight;

- (void)setHeight:(double)newHeight;
- (double)height;

@end

Student.m

//
//  Student.m
//  oc-面向对象
//
//  Created by stevenchang on 9/14/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

//引入头文件"Student.h"
#import "Student.h"

//类的实现
@implementation Student

- (void)setAge:(int)newAge {
    if (newAge < 0) {   //数据的过滤,对于所有小于0的年龄,值均设为0
        newAge = 0;
    }
    age = newAge;    //给age赋值
}

- (int)age {
    //返回age的值
    return age;
}


- (float)weight {
    return weight;
}

- (void)setHeight:(double)newHeight {
    if (newHeight < 0) {
        newHeight = 0;
    }
    height = newHeight;
}

- (double)height {
    return height;
}

@end

Teacher.h

//
//  Teacher.h
//  oc-面向对象
//
//  Created by stevenchang on 9/15/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

//import引用Foundation
#import <Foundation/Foundation.h>


//声明teacher : 表示继承
@interface Teacher : NSObject

//这里演示的都是self的用法
- (void)test;    //声明一个test方法
+ (void)test;      //声明一个test类方法,类方法可以与对象方法同名

- (void)test1;    //声明一个test1对象方法
+ (void)test2;   //声明一个test2类方法
@end

Teacher.m

//
//  Teacher.m
//  oc-面向对象
//
//  Created by stevenchang on 9/15/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

#import "Teacher.h"

@implementation Teacher

- (void)test {
    NSLog(@"调用了对象方法test");
}

+ (void)test {
    NSLog(@"调用了类方法test");
}

- (void)test1 {
    [self test];
    NSLog(@"调用了对象方法test1");
}

+ (void)test2 {
    [self test];
    NSLog(@"调用了类方法test2");
}

@end

Person.h

//
//  Person.h
//  oc-面向对象
//
//  Created by stevenchang on 9/16/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

//import 引用Foundation
#import <Foundation/Foundation.h>


//声明一个Person类   : 表示继承
@interface Person : NSObject

- (void)function;    //声明一个函数

- (void)function2;

@end

Person.m

//
//  Person.m
//  oc-面向对象
//
//  Created by stevenchang on 9/16/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)function {
    NSLog(@"这是有声明和实现的方法");
}

- (void)function1 {
    NSLog(@"这是一个没有声明的函数");
}
@end

JiSuanQI.h

//
//  JiSuanQI.h
//  oc-面向对象
//
//  Created by stevenchang on 9/16/15.
//  Copyright (c) 2015 cz. All rights reserved.
//
//Import 引用Foundation
#import <Foundation/Foundation.h>


//计算器类的声明  : 表示继承
@interface JiSuanQI : NSObject
{
    int _num;
}
//计算和
+ (int)countTotalNum1:(int)num1 addNum2:(int)num2;
//计算平均值
+ (int)averageNumd1:(int)num1 andNum2:(int)num2;
@end

JiSuanQI.m

//
//  JiSuanQI.m
//  oc-面向对象
//
//  Created by stevenchang on 9/16/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

#import "JiSuanQI.h"

@implementation JiSuanQI

+ (int)countTotalNum1:(int)num1 addNum2:(int)num2 {
    return num1 + num2;
}

+ (int)averageNumd1:(int)num1 andNum2:(int)num2 {
//    NSLog(@"%d",self->_num);   类方法中不能访问成员变量
    int total = [self countTotalNum1:num1 addNum2:num2];
    return total / 2;
}

@end


Car.h

//
//  Car.h
//  oc-面向对象
//
//  Created by stevenchang on 9/16/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Car : NSObject
{
    //设置属性
    int _wheel;
    double _price;
    @public
    int num1;
    @private
    int num2;
}

- (void)setWheel:(int)wheel;     //设置轮子
- (int)wheel;       //获取轮子个数

- (void)setPrice:(double)price;     //设置价格
- (double)price;      //获取价格

+ (void)test;

@end

Car.m

//
//  Car.m
//  oc-面向对象
//
//  Created by stevenchang on 9/16/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

#import "Car.h"

@implementation Car

- (void)setWheel:(int)wheel {
    _wheel = wheel;
}

- (int)wheel {
    return _wheel;
}

- (void)setPrice:(double)price {
    _price = price;
}

- (double)price {
    return _price;
}

+ (void)test {
    NSLog(@"test 方法。。。。。。");
}

@end

QQCar.h

//
//  QQCar.h
//  oc-面向对象
//
//  Created by stevenchang on 9/16/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

#import "Car.h"

//QQCar导入了继承了Car : 表示继承
@interface QQCar : Car

@end

QQCar.m

//
//  QQCar.m
//  oc-面向对象
//
//  Created by stevenchang on 9/16/15.
//  Copyright (c) 2015 cz. All rights reserved.
//

#import "QQCar.h"

@implementation QQCar

@end


Claude Skills 深度讲解 阶段 1:Function Call(2023)├─ 大模型可以调用外部工具├─ 问题:缺乏对任务的深度理解└─ 局限:工具调用简单线性阶段 2:MCP 上下文工程(2024)├─ 大模型有了更丰富的上下文和工具├─ 问题:仍然需要手动编写复杂的 Prompt└─ 局限:每次对话都需要重新加载上下文阶段 3:Claude Skills(2025)├─ 大模型有了「能力模块」的概念├─ 可以动态加载、组合、执行专门的工作流├─ 真正实现了「知识的模块化和复用」 阅读详情

相关推荐

Q&A | ZStack替代VMware实问实答

ZStack替代VMware实问实答

zstack_org的博客 1801

OC之面向对象

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------  一、 面向对象和面向过程思想 OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 ? 打开电脑 

海阔天空 983

信贷风控实战指南:Vintage分析表从数据建模到风险洞察

本文是一份信贷风控实战指南,详细阐述了Vintage分析从数据建模到风险洞察的全流程。文章深入解析了Vintage分析作为信贷资产“体检报告”的核心价值,并提供了从借据表与还款计划表设计、账龄计算、逾期口径判定到风险暴露计算与最终可视化透视的完整SQL实现方案,旨在帮助风控从业者构建精准的风险监控体系。

nft7creator的博客 321

OC的三大特性详解

跟C++一样,OC也是面向对象语言,因此它也拥有面向对象语言一般共同的三大特性:封装、继承和多态。 一、封装 封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能。封装的好处:过滤不合理的值,屏蔽内部的赋值过程,让外界不必关注内部的细节。 例如set和get方法。 set方法的作用就是给外界设置成员变量值,可以在方法里面对参数进行相应过滤。 命名规范:方法名必须以set开头;set后面跟上成员变...

程序猿老樊的博客 2198

ESP32实战:破解校园网WPA2-Enterprise认证的完整指南

本文详细介绍了如何使用ESP32开发板破解校园网WPA2-Enterprise认证的完整指南。通过硬件准备、环境搭建、核心代码实现及常见问题排查,帮助开发者解决企业级WiFi连接难题,特别适用于校园网环境下的物联网设备开发。

weixin_29194817的博客 454

QT串口通信控制LED上位机开发教程

串口通信是嵌入式系统与PC端交互的基础技术,通过UART协议实现设备间的数据传输。QT框架提供了跨平台的串口编程支持,结合其GUI模块可以快速开发上位机控制程序。在工业自动化和物联网领域,这种上下位机架构广泛应用于设备监控和控制场景。本案例展示了如何使用QT的SerialPort模块实现LED控制功能,包含串口参数配置、指令发送等核心功能实现,为嵌入式GUI开发提供实践参考。

weixin_42598278的博客 582

【OC总结 面向对象 + 内存管理 + runtime】

面向对象 + 内存管理. + runtime总结 后续随时补充,总结为主,省略了一些源码实现runtime-运行时,是iOS系统的核心,它的本质是一套底层的C语言API。runtime将一些工作放在代码运行的时候才处理而非编译时为 Objective-C 语言的动态属性提供支持,所以很多的类和成员在我们编译的时候是不知道的,在运行时,所编写的代码会转换成完整的确定的代码运行。Apple - Objective-C 运行时。

weixin_61639290的博客 1026

CANoe UDS $27服务DLL生成实战:从工程配置到算法修改全流程

本文详细介绍了在Vector CANoe中为UDS(统一诊断服务)的$27安全访问服务生成定制化DLL(动态链接库)的全流程。从定位官方参考工程、配置Visual Studio开发环境,到深入解析核心的GenerateKeyEx函数接口,并重点演示了如何修改和实现自定义的种子-密钥安全算法,最终完成DLL的编译、部署与CANoe集成测试,为汽车电子诊断开发提供实战指导。

star5的专栏 534

OC的面向对象

在面试中,我们经常会遇到一些原理性的问题,很常识但很难用通俗的语言解释清楚,这也是大部分业务级程序员经常失误的地方。虽然写了多年代码,但是核心思想不清,导致自己的后续发展受限,这是一个优秀的程序员和普通程序员的分水岭。要知其然而知其所以然!这也是整理这篇文章的初衷。文中结合了之前的一些文章,条理更清晰,内容更深入。 本文包括: OC的面向对象运行时Runtime运行循环RunLoop事

dong1008的专栏 576

HTML满屏跳动的爱心(完整代码)

HTML语言实现满屏跳动爱心的完整代码。

AIGC 12万+

Orange3实战教程:文本挖掘---主题建模

主题建模通过LDA、LSI或HDP算法分析文档集合,自动发现隐含主题结构。组件输入为文档语料库,输出包括带主题权重的语料库、主题词分布及完整主题数据。不同算法特性各异:LSI允许正负权重但解释性较弱,LDA更易解释,HDP参数复杂需谨慎设置。结果可结合词云、热力图等可视化工具分析主题特征及分布。示例显示如何通过预处理文本、选择算法(如提取5个LDA主题),并利用MDS和箱线图探索主题间关系及关键词分布。

err2008的专栏 362

一、浅谈oc中的面向对象

------- Windows Phone 7手机开发、.Ios培训、期待与您交流! -------      什么是面向对象,什么是面向过程呢,这是我们这些刚接触编程的菜鸟们,最开始需要接触的东西。这两句话的关键在于,一个是“对象”,一个是“过程”。对象是什么?对象不是我们常说的男女朋友,它是程序中的一个单位,可以用来调用程序中的一些方法,oc中的对象包含类对象与类类型对象。别看只差两个字,其

twh_2015的专栏 750

AI辅助Android开发:从传统到智能化的技术演进

AI辅助开发的核心在于利用算法模型自动化或优化传统任务。在Android开发中,AI可应用于需求分析、设计、编码、测试和维护各阶段。需求分析:AI工具如基于NLP的模型(例如GPT系列)可解析用户需求文档,自动生成用户故事和原型设计。假设产品需求为“开发一个航班查询应用”,AI能提取关键词,输出UML图或伪代码。代码生成:使用AI代码助手(如GitHub Copilot),工程师输入自然语言描述,AI生成Java/Kotlin代码片段。

郑伟强dev的专栏 137

OC面向对象的思想

1.OC是面向对象的,C语言是面向过程的2.面向过程关注的是解决问题需要哪些步骤3.类只关心事物名称、属性、行为4.OC如何定义一个类#import &lt;Foundation/Foundation.h&gt; @interface Car : NSObject //表示继承自NSObject @end5.面向对象的思想——间接需要一个东西,不关心做法,让别人做好6.OC是面向对象的...

Code_BaiYE的博客 377

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【OC】OC语言学习——面向对象(下)

OC提供了NSValue、NSNumber来封装C语言基本类型(short、int、float等)。在 Objective-C 中,**包装类(Wrapper Classes)**是用来把基本数据类型(如 int、float、char 等)“包装”为对象的类。因为 Objective-C 是面向对象的语言,有时候我们需要把基本类型当作对象使用,比如:放入 NSArray、NSDictionary 这样的集合中(这些集合只能存放对象);使用对象方法对数值进行操作;与 Foundation 框架接口交互。

2402_86720949的博客 1518

OC面向对象

文章学习整理自文顶顶博客园 目录 一、面向对象--封装(成员变量)       1、set方法 2、Get方法 3、self关键字 二、OC 面向对象---继承        1、基本概念    2、继承的使用使用 3、继承和组合           继承的适用场合: 4、关键字super   作用:   使用场景: 三、面向对象----多...

qq_28596071的博客 523

IOS学习笔记 第1篇 OC面向对象(一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------  类   第一个oc                                         属性 成员变量 行为 方法 对象   常见错误 oc方法和函数的区别 o8第2个oc 语法介绍 对象与函数参数 一种方式

大白天 667

【oc】--面向对象(下)

NSInterger: 大致相当于型整数NSUInterger: 大致相当于型整数CGFLoat:在64位平台上相当于double。

2401_86200358的博客 835

oc 笔记 面向对象下

在 Objective-C(OC)中,“包装类”通常是指的类。OC 是基于 C 的,所以也支持基本数据类型(如intfloatchar等),但有些场景下(如在集合中存储)只能使用对象类型,这时就需要用到“包装类”。

2501_91494333的博客 731

④--OC面向对象

主要内容:OC面向对象基本语法,类的设计和实现以及对象的实例化,容易出错的地方

Mike 622

OC基础语法-03 面向对象思想

OC基础语法-03 面向对象思想

MrRightZJ的博客 549

OC面向对象—继承

OC面向对象—继承     OC面向对象—继承 一、基本概念 程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量)。  在这里动物是猫类和狗类的父类,黑猫和白猫类是猫类的子类。 继承的好处: (1)抽取出了重复的代码 (2)建立了类和类之间的联系 继承的缺点:

hahahacff的专栏 2564

OC面向对象—多态

OC面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。 在使用多态是,会进行动态检测,以调用真实的对象方法。 多态在代码中的体现即父类指针指向子类对象。 Animal类的声明   Animal类的实现   Dog类继承自Animal类   Dog类的实现   测试程序:

软件工程班梁镋鑫的专栏 600

oc 笔记 面向对象上

在这一节我会去接受 oc 中属性使用getter和setter方法,在属性中其实是自带setter和getter,而且他还具有一定的扩展性比如可以重命名getter和setter。那这里我们去举个例子来介绍属性的相关内容@interface fkuser2 : NSObject//属性的相关代码@end@implementation fkuser2//属性//_name可以换成任意变量名只要和@synthesize正确绑定即可@end。

2501_91494333的博客 1047

15.OC面向对象—封装

iOS博客 424

【OC】Objective - C初探之面向对象

是以过程(步骤)为中心的编程方式。把一件要做的事,从头到尾,,一步步完成。重点是· 注重(先做什么、后做什么)· 主要用组织代码· 代码容易从上到下直接执行· 小程序简单直接,速度快面向对象以对象(数据 + 行为)为中心的编程方式把现实世界的实体抽象为程序中的对象,每个对象既包含数据(属性),又有能做的事(方法),强调封装📦 继承 多态注重代码模块化,便于维护和扩展适合。

2402_86720949的博客 1219
上一篇: oc基本语法
下一篇: 熟悉oc面向对象的小例子
StevenLoveMaggie
博客等级 码龄16年 10粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值