//
// Engine.h
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
/**
*实现nscopying协议,可以进行复制
*/
@interface Engine : NSObject <NSCopying> {
}
@end
//
// Engine.m
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "Engine.h"
@implementation Engine
/**
采用NSCopying协议,必须实现copyWithZone:方法,zone是NSZone类的一个对象。
指向一块可供分配的内存区域,当你向一个对象发送copy消息时,该copy消息在到达你的代码之前被转换为copyWithZone:方法。
*/
-(id) copyWithZone:(NSZone *) Zone{
Engine * engineCopy;
/**
allocWithZone:是一个实例方法,我们需要将该消息发送给一个类,而不是一个实例变量
allocWithZone: 分配内存并创建一个该类的新对象,init消息使其初始化
**/
engineCopy=[[[self class] allocWithZone:Zone]init];
return (engineCopy);
}
-(NSString*) description{
return (@"i am a engine,vroomal");
}
@end
//
// Tire.h
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface Tire : NSObject <NSCopying>{
}
@end
//
// Tire.m
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "Tire.h"
@implementation Tire
- (id) copyWithZone:(NSZone *)zone{
Tire *tireCopy;
tireCopy=[[[self class] allocWithZone:zone] init];
return (tireCopy);
}
-(NSString*) description{
return (@"i am a tire,i last a while");
}
@end
//
// Car.h
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@class Tire;
@class Engine;
//@class 创建一个向前引用,就是这告诉编译器:“相信我,以后你会知道这个类到底是什么,但是现在,你只需要知道这些”
@interface Car : NSObject <NSCopying> {
Tire *tires[4];
Engine *engine;
}
-(void) setEngine:(Engine*) newEngine;
-(Engine *)engine;
-(void) setTire:(Tire*) tire
atIndex:(int) index;
-(Tire*) tireAtIndex:(int) index;
-(void) print;
@end
//
// Car.m
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "Car.h"
#import "Tire.h"
#import "Engine.h"
@implementation Car
-(id) copyWithZone:(NSZone *) zone{
Car *carCopy;
carCopy=[[[self class] allocWithZone:zone] init ];
//carCopy.name=self.name;
Engine *engineCopy;
engineCopy=[[Engine copy] autorelease];
carCopy.engine=engineCopy;
int i;
for(i=0;i<4;i++){
Tire *tireCopy;
tireCopy=[[self tireAtIndex:i] copy];
[tireCopy autorelease];
[carCopy setTire:tireCopy atIndex:i];
}
return (carCopy);
}
-(void) setEngine:(Engine *) newEngine{
engine=newEngine;
}
-(Engine *) engine{
return (engine);
}
-(void) setTire:(Tire *) tire atIndex:(int) index{
if(index<0 ||index>3){
NSLog(@"bad index (%d) in setTire:atIndex:",index);
exit(1);
}
tires[index]=tire;
}
-(Tire *) tireAtIndex:(int) index{
if(index<0||index>3){
NSLog(@"bad index (%d) in setTire:atIndex:",index);
exit(1);
}
return tires[index];
}
-(void) print{
NSLog(@"-----%@",tires[0]);
NSLog(@"00000=%@",tires[1]);
NSLog(@"%@",tires[2]);
NSLog(@"%@",tires[3]);
}
@end
//
// Slant6.h
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "Engine.h"
//它是继承其他类而不是通过指针指向其他类,所以不能这头文件里使用@class语句。因为编译器需要先知道所有关于超类的信息才能成功地为其子类编译@interface.
@interface Slant6 : Engine {
}
@end
//
// Slant6.m
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "Slant6.h"
@implementation Slant6
-(id) copyWithZone:(NSZone *) zone{
Slant6 *slant6Copy;
slant6Copy=[super copyWithZone:zone] ;
return (slant6Copy);
}
-(NSString *) description{
return (@" i am a slant-6");
}
@end
//
// AllWeatherRadia.h
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "Tire.h"
@interface AllWeatherRadia : Tire <NSCopying> {
}
@end
//
// AllWeatherRadia.m
// carParts
//
// Created by 110 on 10-1-24.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "AllWeatherRadia.h"
@implementation AllWeatherRadia
-(id) copyWithZone:(NSZone *) zone{
AllWeatherRadia *allWeatherRadiaCopy;
allWeatherRadiaCopy=[super copyWithZone:zone];
return (allWeatherRadiaCopy);
}
-(NSString *) description{
return (@" i am a tire for rain or shine ");
}
@end
分享到:
相关推荐
JAVA面向对象程序设计是 Java 编程语言的核心 contents,涵盖了面向对象编程的基本概念、语法规则、编程技术和实际应用等方面的知识。本文总结了 JAVA面向对象程序设计的知识点,涵盖了 Java 语言的基本语法、面向...
1. **面向对象编程基础**:面向对象编程(OOP)是一种编程范式,它基于“对象”的概念,强调数据和操作数据的方法结合在一起。Java作为一款纯面向对象的语言,其一切皆为对象,包括基本类型都有对应的包装类。 2. *...
本项目是基于C++的面向对象程序设计实现,旨在教授学生如何运用面向对象编程思想来构建实际的应用程序。** **一、面向对象编程基础** 面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,其核心思想...
SSD3教材内容覆盖了面向对象编程的多个方面,包括但不限于继承、多态、抽象类和接口的实现。 在学习过程中,学生不仅需要通过Java语言进行编程实践,还要学习设计健壮、可扩展的类。课程要求学生能够使用UML(统一...
C++是一种强大的、通用的编程语言,以其支持面向对象编程(OOP)而闻名。面向对象编程是一种编程范式,它以对象为中心,强调数据和操作数据的方法的封装。本资料集是关于“C++面向对象程序设计”的课后习题答案,...
这个项目旨在帮助学生掌握Java语言中的面向对象编程概念,特别是类的设计、属性和方法的运用,以及数组和集合(如ArrayList)的使用。 在“随机点名器”项目中,主要功能要求包括: 1. 存储全班同学的姓名。 2. ...
《面向对象程序设计:C++语言描述(原书第2版)》内容丰富,结构合理,写作风格严谨,深刻地论述了c++语言的面向对象编程的各种技术,主要内容包括:面向对象编程方法、c++语言的各种特性、stl、c++输入/输出流、mfc等。...
其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机执行Java程序的原理、在实际项目中的运用、设计模式和性能优化技巧。同时,本书还贯穿了Sun公司的SCJP(Sun Cer......
首先,类是面向对象编程的基础。类定义了一组属性和行为,这些属性描述了类的特征,而行为则表示类可以执行的操作。在Java中,我们使用关键字"class"来声明一个类,例如: ```java public class MyClass { // 属性...
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计看作是对象的交互,对象之间的关系和行为。 一、对象和类 在Java中,对象是指具有某些特征和行为的实体,例如人、学生、大象、冰箱...
本实验旨在让学生深入理解和实践面向对象编程的基本原理和技巧。 首先,实验要求学生掌握类的定义。在 Python 中,类是创建对象的蓝图,它包含属性(成员变量)和行为(成员函数)。例如,定义了一个名为 `Vehicle`...
【标题】"C#面向对象编程期末参考题"揭示了本次讨论的核心——C#编程语言中的面向对象编程(Object-Oriented Programming, OOP)概念,这是软件开发中的一种重要方法论。C#是一种现代、类型安全且面向对象的语言,...
面向对象编程在设计、测试和维护大型应用程序方面尤其有用。通过封装,可以隐藏不必要的信息,从而简化类的使用。继承促进了代码重用,并提供了一种自然的方式来模拟现实世界的层次结构。而多态性允许在软件中添加新...
C++是一种强大的、通用的编程语言,以其支持面向对象编程(OOP)而闻名。面向对象编程是一种设计和实现软件的方式,它强调将现实世界的问题和解决方案映射到计算机程序中的对象。本资料包“C++面向对象程序设计 经典...
C++是一种强大的编程语言,以其面向对象特性而闻名,它结合了过程化编程和面向对象编程的优势。在“C++面向对象程序设计教程——课件PPT”中,我们可以深入学习这一主题,由陈维兴和林小茶编著,清华大学出版社出版...
《C++面向对象编程实例大全》是一本专为初级学习者设计的教程,旨在通过丰富的实例深入浅出地讲解C++的面向对象编程概念。面向对象编程(Object-Oriented Programming,简称OOP)是C++的核心特性,也是现代软件开发...
1. **对象和类**:对象是面向对象编程的基本单元,它包含了数据(属性)和操作这些数据的方法(行为)。类是创建对象的模板或蓝图,定义了一组具有相同特征和行为的对象的通用描述。 2. **封装**:封装是面向对象的...
Matlab面向对象编程是一种在MATLAB环境下通过面向对象的方法来组织和构造程序代码的技术。面向对象编程(OOP)的基本特征包括抽象、封装、继承和多态。以下是根据给定的文件信息,对这些知识点的详细解释: 1. 抽象:...
C++语言继承了C语言的优点,并加入了面向对象编程的概念,成为了一种功能强大且灵活的程序设计语言。 1.1 C++语言的特点 * 静态类型:C++语言是一种静态类型的语言,变量的数据类型在编译时确定。 * 编译型:C++...