英语原文共 551 页,剩余内容已隐藏,支付完成后下载完整资料
4.2.5类型转换运算符
你已经看到,在声明和定义方法时,如何将类型放入圆括号中来声明返回值和参数的类型。在表达式中使用类型时,它表示一个特殊的用途。
代码清单4-5中的最后一个除法运算引入了类型转换运算符。
f2 = (float) i2 / 100; //类型强制转换运算符
为了求表达式的值,类型转换运算符将变量i2的值转换成float类型。该运算符永远不会影响变量i2的值。它是一元运算符,行为和其他一元运算符一样。因为表达式一a永远不会影响a的值,因此,表达式(float ) a也不会影响a的值。
类型转换运算符比其他所有的算术运算符的优先级都高,但一元减号和一儿加号运算符除外。当然,如果需要,可经常使用圆括号进行限制,以任何想要的顺序来执行一些项。
下面是使用类型转换运算符的另一个例子,表达式:
(int) 29.55 (int) 21.99
在Objective-C中等价于
29 21
因为将浮点值转换成整数的后果就是舍弃其中的浮点值。表达式
(float) 6 / (float) 4
得到的结果为1.5,与下列表达式的执行效果一样:
(float) 6 / 4
类型转换运算符通常用于将一般id类型的对象转换成特定类的对象。例如,
id myNumber;
Fraction *myFraction;
....
myFraction = (Fraction *) myNumber;
将id变量myNumber的值强制类型转换成一个Fraction对象。转换结果赋给Fraction变量myFraction.
4.3赋值运算符
Objective-C语言允许使用以下的一般格式将算术运算符和赋值运算符合并到一起:
OP=
在这个格式中,op是任何算术运算符,包括 、-、*、/和%·此外,op还可以是任何用于移位和屏蔽操作的位运算符,这些内容将在以后讨论。
请考虑下面这条语句:
count =10
通常所说的“加号等号”运算符( =)将运算符右侧的表达式和左侧的表达式相加,再将结果保存到运算符左边的变量中。因此,上面的语句和以下语句等价:
count=count 10
表达式:
counter-=5
使用“减号等号”赋值运算符将counter的值减5,它和下面这个语句等价:
counter = counter-5
下面是一个稍微复杂一些的表达式:
a /= b c
无论等号右侧出现何值(或者b加c的和),都将用它除以a,再把结果存储到a中。因为加法运算符比赋值运算符的优先级高,所以表达式会首先执行加法。事实上,除逗号运算符外的所有运算符都比赋值运算符的优先级高。而所有的赋值运算符的优先级相同。
在这个例子中,该表达式的作用和下列表达式相同:
a = a / (b c)
使用赋值运算符的目的有3个:首先,程序语句更容易书写,因为运算符左侧的部分没有必要在右侧重写。其次,结果表达式通常容易阅读。最后,这些运算符的使用可使程序的运行速度更快,因为编译器有时在计算表达式时能够产生更少的代码。
4.4 Calculator类
现在定义一个新类,我们将创建一个Calculator类,它是一个简单的四则运算计算器,可用来执行加、减、乘和除运算。类似于常见的计算器,这种计算器必须能够记录累加结果,即通常所说的累加器。因此,方法必须能够执行以下操作:将累加器设置为特定值、将其清空(或设置为0),以及在完成时检索它的值。代码清单4-6包括这个新类的定义和一个用于试验该计算器的测试程序。
代码清单4-6
//实现calculator类
#import_ lt;Foundation/Foundation.hgt;
@interface Calculator:NSObject
//累加方法
一(void) setAccumulator:(double) value;
一(void) clear;
一(double) accumulator;
//算术方法
一(void) add: (double) value;
一(void) subtract:(double) value
一(void) multiply: (double) value
一(void) divide: (double) value;
@end
@implementation Calculator
{
double accumulator;
}
一(void) setAccumulator: (double) value
{
accumulator=value;
}
一(void) clear
{
accumulator=0;
}
一(doub1e) accumulator
{
return accumulator:
}
一(void) add: (double) value
(
accumulator =value;
}
一(void) subtract:(double) value
{
accumulator-=value;
}
一(void) multiply: (double) value
{
accumulator*=value;
}
一(void) divide:(double) value
{
accumulator/=value;
}
@end
int main (int argc, char *argv[])
{
@autoreleasepool{
Calculator*deskCalc=[[Calculator alloc] init];
[deskCalc setAccumulator: 100.0];
[deskCalc add: 200.];
[deskCalc divide:15.0];
(deskCalc subtract:10.0];
[deskCalc multiply: 5];
NSLog (@'The result is %g',[deskCalc accumulator]};
}
return 0;
}
代码清单4-6输出
The result is 50
Calculate:类只有一个实例变量,以及一个用于保存累加!器值的double变量。方法定义的本身非常直观。
要注意调用multiply方法的消息:
[deskCalc multiply:5];
该方法的参数是一个整数,而它期望的参数类型却是double。因为方法的数值参数会自动转换以匹配期望的类型,所以此处不会出现任何问题。multiply:期望使用double值,因此调用该函数时,整数5将自动转换成双精度浮点值。虽然自动转换过程会自己进行,但在调用方法时提供正确的参数类型仍是一个较好的程序设计一习惯。
要认识到与Fraction类不同,Fraction类可能使用多个不同的分数,在这个程序中可能希望只处理单个Calculator对象。然而,定义一个新类以便更容易处理这个对象仍是有意义的。在某个时候,你可能会为计算器添加一个图形前端,以便用户能够在屏幕上真正单击按钮,就像系统或手机中已安装的计算器应用程序一样。
在第10章“变量和数据类型”中会更多地讨论有关数据类型转换和位操作。
在以后的一些练习中,可以看到定义Calculator类的另一个好处,即便于扩展。
4.5 练习
1. 下列场两种,哪些是非法的?为什么?
2.编写一个程序,使用以下公式将华氏温度(F)27度转换成摄氏温度(C):
C=(F-32)/1.8
不需要定义一个类来执行计算,只需要简单地列出表达式就满足要求。
3.以下程序输出什么结果?
4.编写一个程序,求以下多项式的值(计算表达式时,只需直接计算,因为在Objective-C中没有幂指操作符):
5.编写一个程序,求下列表达式的值,并显示其结果(记住要使用指数格式显示结果)。
6.复数包含两个部分:实部和虚部。如果a是实部,b是虚部,那么符号
a bi可以用来表示复数。
编写一个Objective-C程序,定义一个名为Complex的新类。依照为Fraction类创建的范例,为该类定义以下方法:
编写一个测试程序测试这个新类和各个方法。
7.假设你正开发操作图形对象的函数库。从定义名为Rectangle的新类开始。目前,仅卜记录矩形的宽和高即可。开发一些方法用于设置矩形的宽和高、检索这些值以及计算矩形的面积和周长。假定这些矩形对象使用整数坐标栅格来描述矩形,例如,一台计算机屏幕。在这种情况下,假定矩形的宽和高都是整数值。
以下是Rectangle类的@interface部分:
请编写implementation部分,并编写一个测试程序来测试新类的方法。
8.修改代码清单4-6中的add:. subtract: .muntiply:和divide:方法,使其返回累加器的结果值。测试这些新方法。
9.完成练习8后,把以下方法添加到Calculator类中并测试它们:
10.为代码清单4-6中的Calculator添加一项存储功能。实现以下方法声明并测试它们:
为最后两组方法设置一个累加器,并能够对内存执行指定的操作。所有的方法都需要返回累加器的值。
- 循环
在Objective-C中,有若干方法可以重复执行一系列代码。本章的主题是循环,它们由以下几部分组成:
.for语句
.while语句
.do语句
我们从一个简单的例子开始讨论:计数。
如果要把15个弹球排列成一个三角形,排列后的弹球可能如图5.1所示。
三角形的第一行包含一个弹球,第二行包含两个弹球,以此类推。
一般来说,包含n行的三角形可容纳的弹球总数等于1 到n之间所有整数之和,这个和称为三角数。如果从1开始,第4位三角数将等于1到4之间连续整数的和(1 2 3 4),即10}
假设要编写一个程序来计算第8位三角数的值。显然可以在头脑中计算这个值,但是为了学习参数,假设你用Objective-C编写一个带有参数的程序来执行这个任务。代码清单5-1显示了这个程序。
程序5.1 的输出为
The eighth triangular number is 36
如果计算相对较小的三角数,代码清单5-1中的方法工作良好,但是要找出第200位三角数的值,该程序将如何处理呢?必须修改代码清单5-1,以便显式地将1~ 200之间的所有整数相加,这项工作肯定是冗长乏味的。值得庆幸的是,有一个比较简单的方法。
计算机的基本属性之一就是它能够重复执行一组语句。这种循环能力让程序员能够开发出包含重复过程的简捷程序,这些过程能够以不同的方式执行成百上千的程序语句。Objective-C包含3种用于编写循环结构的程序语句。
5.1 for语句
让我们来看一个使用for语句的程序。代码清单5-2的目的是计算第200位三角数。看看你是否可以找出for语句的工作方式。
程序5.2 输出为
The 200th triangular number is 20100
需要对代码清单5-2进行一些解释。用于计算第200位三角数的方法其实与代码清单5-1中用于计算第8位三角数的方法是相同的,就是求1~200之间的整数之和。
在执行for语句之前,变量triangularNumber被设置为0。一般来说,在程序使用变量之前,需要将所有的变量初始化为某个值(和处理对象一样)。后面将会学到,某些类型的变量有默认的初始值,但是无论如何都应该为变量设置初始值。for语句提供的机制让你不用显式地写出1 ~200之间的每个整数。从某种意义上讲,这条语句将为你生成这些数字。
for语句的一般格式如下: 剩余内容已隐藏,支付完成后下载完整资料
资料编号:[153767],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。