黑马程序员-类的声明与实现,方法与函数以及常见错误
来源:互联网 发布:阿尔法淘宝宝贝 编辑:程序博客网 时间:2024/06/16 03:28
/*
人
类名:Person
属性:(成员变量\实例变量):体重,年龄
行为(方法):走,吃
*/
#import <Foundation/Foundation.h>
//类的声明
//*成员变量 方法声明
@interface Person :NSObject
{
@public
int age;
double weight;
}
-(void)walk;
-(void)eat;
@end
//类的实现
@implementation Person
//实现声明的方法
-(void)walk;
{
NSLog(@"%d岁%f公斤的人走了一段路",age,weight);
}
-(void)eat;
{
NSLog(@"%d岁%f公斤的人吃东西",age,weight);
}
@end
int main()
{
/*
//在使用类创建对象前,会将类加载进内存,而且只加载一次。
Person *p1=[Person new];//每个对象都有个Isa指针指向类
p1->age =20;
p1->weight =50.0;
[p1 walk];
Person *p2=[Person new];//创建多个对象
p2->age =30;
p2->weight =53.5;
[p2 walk];
*/
//分别只设置一项
Person *p1=[Person new];
p1->age =20;
Person *p2=[Person new];
p2->weight =50.0;
[p1 walk];//输出是20,0;
//指针传递并修改属性
Person *p1=[Person new];
p1->age =20;
p1->weight =50.0;
Person *p2 =p1;//将p1的地址给p2
p2->age =30;
[p1 walk];
/*
Person *p1=[Person new];
p1->age =20;
p1->weight =50.0;
Person *p2=[Person new];
p2->age =30;
p2->weight =53.5;
p1=p2;//将p2内容给p1.p1指向p2对象,
p1->age = 40;
[p2 walk];//某个对象(p2)在做什么事(walk)
*/
return 0;
}
面向对象封装的好处
更加接近人类的思考方式
只需要关注对象,不需要关注步骤
#import <Foundation/Foundation.h>
@interface Car : NSObject
{// 成员变量
@public
int wheels;
int speed;
}
- (void)run;
@end
@implementation Car
- (void)run
{
NSLog(@"%d个轮子,速度为%dkm/h的车子跑起来", wheels, speed);
}
@end
void test(int w, int s)//实质还是值传递
{
w = 20;
s = 200;
}
void test1(Car *newC)//内存分析认真听老师讲解,08对象与函数参数
{
newC->wheels = 5;
}
void test2(Car *newC)//这段非常有意思,
{
Car *c2 = [Car new];//oc对象创建就存在不像指针那样随着方法消失
c2->wheels = 5;
c2->speed = 300;
newC = c2;//相当于把外部指针指向了内部对象,不会对外部产生影响。
newC->wheels = 6;
}
int main()
{
Car *c = [Car new];
c->wheels = 4;
c->speed = 250;
//test(c->wheels, c->speed);
//test1(c);
test2(c);
[c run];
return 0;
}
类的声明和实现
@interface和@implementation的分工
@interface就好像暴露在外面的时钟表面
@implementation就好像隐藏在时钟内部的构造实现
常见书写错误
1.只有类的声明,没有类的实现
2. @interface后面漏了@end 造成了@interface和@implementation嵌套
两个类的声明嵌套
3.成员变量没有写在括号里面
4.方法的声明写在了大括号里面,或者写在实现@implementation里面
5.方法的实现在@interface下面
6.成员变量(也叫实例变量,就是说只有实例对象才能拥有的变量)不能在{}中进行初始化、不能被直接拿出去访问,默认为protect
7. 方法不能当做函数一样调用
8.成员变量\方法不能用static等关键字修饰,别跟C语言混在一起比如说:static int wheels.没有什么所谓的内部方法这个概念
9. 类的实现可用写在main函数的后面,主要在声明后面就行了
OC方法和函数的区别
OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在
C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有,不依赖与对象。
C函数不能访问OC对象的成员,可以存在任意位置但是唯一不能存在于声明@interface@end之间,
低级错误:方法有声明,但是实现的时候写成了函数
OC的方法注意
方法只有声明,没有实现(经典错误)
方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)
编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告
没有@interface,只有@implementation,也是能成功定义一个类的
@implementation Car : NSObject
{
@public
int wheels; // 多少个轮子
int speed; // 时速
}
- (void) run
{
NSLog(@"%i个轮子,%i时速的车子跑起来了", wheels, speed);
}
@end
@implementation中不能声明和@interface一样的成员变量
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com- 黑马程序员-类的声明与实现,方法与函数以及常见错误
- 黑马程序员----objective-C 类与对象基础篇(二)【声明与实现,方法与函数及常见错误】
- 黑马程序员_OC类的声明和实现以及常见错误
- 02.黑马程序员-类的声明与实现
- 黑马程序员_对象的简单分析_对象与函数参数_常见错误
- 黑马程序员——初入oc,关于类的声明与实现
- 黑马程序员--类的声明和实现
- 黑马程序员_方法与函数的区别
- 黑马程序员-OC类的声明和实现,以及OC的优势
- 黑马程序员-OC中对象方法的声明与调用(多个参数)
- 黑马程序员_方法的声明和实现
- Object-c------类的声明与实现以及注意事项
- 方法(函数)的声明与实现、方法(函数)的调用
- 类的声明与实现
- C++类中static成员函数的声明与实现
- vector相关的模板类函数声明与实现
- 【错误】 - Scanf函数与字符串不得不说的故事 - 黑马程序员
- 黑马程序员---OC基础---类的声明和实现
- 互斥锁pthread_mutex_t
- ROS中的CMakeLists.txt
- nginx配置静态文件expires时间与cache-control
- 13个最受欢迎的Python开源框架
- 深入理解PHP原理之Opcodes
- 黑马程序员-类的声明与实现,方法与函数以及常见错误
- tc-SRM-626-DIV1-250
- 【设计模式】——原则
- android之ScrollView里嵌套ListView(转)
- 学生信息管理系统(三)——界面分析
- 学习BluePill源码笔记-2
- 敏捷学习型团队-学习记录
- linux学习总结10
- strstr() 函数