//
// main.m
// IOS150609_objectiveC_ClassAndObjective
//
// Created by Peng Junlong on 15/6/9.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import <Foundation/Foundation.h>
//**********************
//* 面向过程与面向对象 *
//**********************
//C语言是面向过程的
//面向过程强调业务逻辑
//五子棋:
//1.显示棋盘 2.黑子先走 3.判断输赢 4.绘制棋盘 5.白子下棋 6.判断输赢 7.绘制棋盘 8.返回第二步 9.下棋结束
//用函数把逻辑过程中的每一步实现,通过函数调用加上控制结构实现整个项目
//面向对象强调的是对象
//1.黑白双方 2.棋盘系统 3.下棋规则
//黑白双方负责接收用户输入,告知棋盘系统显示棋盘,通过棋盘规则判断输赢
//类与对象
//从生活上:
//对象 类
//张三 奥巴马 人类
//官方定义
//类:具有相同特征事物的统称
//对象:类的实例化
//从编程的角度看
//结构体:封装了数据结构
//函数:封装了处理数据的方法
//类:既封装了数据结构,又封装了处理数据的方法(升级版的结构体)
//对象:用类定义的实例(类类型的对象)
//类: Car 对象:Car *Toyouta
// Person Person *zhangSan
//实例方法(对象方法) 与实例变量
//[Window open];
//[Text write];
//[Text read];
//Person
//{
// NSString *name;
// int age;
//}
//@interface:定义类的关键字
//@end:表示类的定义结束
//Student:类名(类名的首字母一定要大写)
//系统类的命名:NS(NextStep)+每个单词的首字母大写
//NSObject
//NSString
//NSArray
//NSData
@interface Student : NSObject //NSObject类是根类,即所有类的超类
{
@private
NSString *_name; //实例变量的命名通常用"_"开头,从第二个单词开始首字母大写;int是基本数据类型,如果你用int型数据的话,直接定义就可以而所有的类都是需要定义为指针的
int _age;
}
/*成员变量必须包含在大括号中
*注意成员变量不声明任何关键字的话是默认可访问性@Protected
*注意在ObjC中不管是自定义的类还是系统类对象都必须是一个指针,例如下面的_name
*/
//构造(初始化)方法 构造方法的命名规则为:initWithXxxx
//"-"表示对象(实例)方法,给类的对象调用;"+"表示类方法,给当前类调用,通常用类名来调用
//id:泛型对象指针,类似C语言中的void *
//无形参方法,返回值为id类型
- (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
- (id)init
{
if (self = [super init]) {
}
return self;
}
- (id)initWithName:(NSString *)name
{
if (self = [super init]) {
}
return self;
}
- (id)initWithName:(NSString *)name andAge:(int)age
{
self = [super init]; //super是调用父类方法的关键字(编译器符号)
//先用父类的构造方法初始化自己,然后再初始化自己自定义
//的实例变量(一定要先调用父类的init初始化自己)
//self指向调用者的对象指针
if (self) {
_name = name;
_age = age;
}
return self;
}
//getter方法的实现
- (NSString *)getName
{
return _name;
}
- (int)getAge
{
return _age;
}
//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 *zhangSan = [Student alloc]; //申请内存空间,返回申请到的内存的首地址,这才是对象;alloc 类方法 创建对象
zhangSan = [zhangSan initWithName:@"张三" andAge:23]; //对分配的内存进行初始化
NSLog(@"name = %@ , age = %i",[zhangSan getName],[zhangSan getAge]);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
[Student testStudent];
NSLog(@"Hello, World!");
}
return 0;
}