//
// main.m
// OC1_类与对象
//
// Created by zhangxueming on 15/6/9.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
//
#import <Foundation/Foundation.h>
//面向过程与面向对象
//C语言偏向面向过程
//面向过程强调业务的逻辑
//五子棋
//1.显示棋盘 2.黑子先走 3.判断输赢 4.绘制棋盘 5.白子下棋 6.判断输赢 7.绘制棋盘 8.返回第二步 9.下棋结束
//用函数把逻辑过程中的每一步实现, 通过函数调用加上控制结构实现整个项目
//面向对象强调的是对象
//1.黑白双方 2.棋盘系统 3.下棋规则
//黑白双方负责接收用户输入, 告知棋盘系统显示棋盘, 通过棋盘规则判断输赢
//类与对象
//从生活上:
//对象 类
//章子怡 奥巴马 人类
//小黑 狗类
//小飞的macbook computer
//官方定义
//类: 具有相同特征事物的统称(抽象的概念)
//对象: 类的实例化(形象)
//从编程的角度来看
//结构体: 封装了数据结构
//函数: 封装了处理数据的方法
//类: 既封装数据结构, 又封装了处理数据的方法 (升级版的结构体)
//对象: 用类定义的实例(类类型的对象)
//类: Car 对象: Car *mycar
//Person Person *xiaoHua
//实例方法(对象方法)与实例变量
//[window earse];
//[text write];
//[text read];
//[view show];
//[xiaoHua age];
//Person
//{
// NSString *name;
// int age;
//}
//@interface: 定义类的关键字
//@end: 表示结束
//Student : 类名(类名的首字母要大写)
//系统类的命名 NS+每个单词的首字母大写
//NSObject
//Next Step
//NSObject
//NSString
//NSArray
//NSData
//NSNumber
//NSMutableArray
@interface Student : NSObject //NSObject类是一个根类(基类)
{
NSString *_name;
//实例变量的命名通常用_开头(习惯使然),以后每个单词的首字母大写;
int _age;
}
//构造(初始化)方法
//- 表示对象(实例)方法,给类的对象调用 + 表示类方法,给当前类调用,通常用类名来调用
//id : 泛型对象指针 类似void *
//无形式参数, 返回值为 id类型 方法名: init
-
(id)init;
//有一个形式参数 name , 返回值为 id类型 方法名: initWithName:
- (id)initWithName:(NSString *
)name;
//有两个形式参数 name age, 返回值为 id 类型 方法名: initWithName:andAge:
- (id)initWithName:(NSString *)name andAge:(
int)age;
//OC中的命名规范:第一个单词的首字母小写,以后每个单词的首字母大写 "驼峰规则"
//匿名方法, 方法名: initWithName::
//- (id)initWithName:(NSString *)name :(int)age;
//getter方法
//读取实例变量的方法
- (NSString *
)getName;
- (
int)getAge;
//setter方法
//修改实例变量的方法
- (
void)setName:(NSString *
)name;
- (
void)setAge:(
int)age;
- (
void)setName:(NSString *)name andAge:(
int)age;
//类方法
//给当前类调用, 通过类名调用
+ (
void)testStudent;
@end
//@implementation + 类名 //实现类的关键字
@implementation Student
//initWithXXX
- (id)initWithName:(NSString *)name andAge:(
int)age
{
self = [super init];
//super是调用父类方法的关键字(编译器符号)
//先用父类的构造初始化自己, 然后再初始化自定义的实例变量
//self 指向调用者的对象指针
if (self) {
_name =
name;
_age =
age;
}
return self;
}
//getter方法实现
- (
int)getAge
{
return _age;
}
- (NSString *
)getName
{
return _name;
}
//setter方法的实现
- (
void)setName:(NSString *
)name
{
_name =
name;
}
- (
void)setAge:(
int)age
{
_age =
age;
}
- (
void)setName:(NSString *)name andAge:(
int)age
{
_name =
name;
_age =
age;
}
//测试当前类是否可用
+ (
void)testStudent
{
Student *xiaoHua = [Student alloc];
//alloc 类方法 创建对象
xiaoHua = [xiaoHua initWithName:
@"小华" andAge:
12];
NSLog(@"name = %@, age = %i", [xiaoHua getName], [xiaoHua getAge]);
Student *xiaoFei = [[Student alloc] initWithName:
@"小飞" andAge:
20];
[xiaoFei setName:@"小小飞" andAge:
22];
NSLog(@"name = %@, age = %d",[xiaoFei getName], [xiaoFei getAge]);
}
@end
int main(
int argc,
const char *
argv[]) {
@autoreleasepool {
[Student testStudent];
}
return 0;
}
转载于:https://www.cnblogs.com/0515offer/p/4562978.html