第17章C++面向对象程序设计作业参考答案Word文档格式.docx
《第17章C++面向对象程序设计作业参考答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《第17章C++面向对象程序设计作业参考答案Word文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
//modelisaconst
constintv[]={1,2,3,4};
//v[i]isaconst
constintx;
//error:
noinitializer未赋初值
voidf()
{
model=200;
//error不能修改常量的值
v[2]++;
【修改1】
constintx=0;
//赋初值
cout<
model<
//修改常量的值
v[2]<
//修改常量的值
或者inttemp=v[2]+1;
【修改2】
int*constmodel=90;
constint*v[]={1,2,3,4};
1.4intstrcmp(constchar*,constchar*);
【解答】确保函数strcmp不会修改参数指针所指向的变量
1.6
(讲义)
•C++语言是强类型化语言,任何函数在使用以前必须有该函数的原型说明,以便进行实际参数与形式参数之间的类型匹配检查。
•函数返回值的类型和函数参数的类型、个数、次序在函数声明,函数定义和函数调用时必须匹配。
•C++语言的编译器执行上述检查能显著减少很多隐藏的错误。
使用函数原形执行强类型检查。
任何函数在使用以前必须有该函数的原型说明,以便进行实际参数与形式参数之间的类型匹配检查。
函数返回值的类型和函数参数的类型、个数、次序在函数声明,函数定义和函数调用时必须匹配。
如果某个函数的定义和调用与其原型不匹配,那么编译器会指出这种错误,而不用等到运行程序时才显示错误。
创建带有缺省参数的函数时,应注意:
1、缺省参数值应该代表最常使用的情况。
如果在80~90%的时间里能用上缺省值,缺省参数才比较有意义。
2、如果给某个参数一个缺省值,那么其后的所有参数都需要赋给缺省值。
1.8
iostream>
usingnamespacestd;
//Overloadmax()threeways重载函数名max三次
intmax(inta,intb);
longmax(longa,longb);
doublemax(doublea,doubleb);
{inta1=3,b1=10;
longa2=123456,b2=567893;
doublea3=2*10^6,b3=-12.34;
"
int"
max(a1,b1)<
long"
max(a2,b2)<
double"
max(a3,b3)<
//使用相同的函数名求不同类型数据的绝对值
return0;
intmax(inta,intb)
{intc;
a>
b?
c=a:
c=b;
return(c);
longmax(longa,longb)
{longc;
doublemax(doublea,doubleb)
{doublec;
1.9要点:
申请动态数组
//Asimpleexampleofnewanddelete.
string>
constintN=10;
intmain()
{char*p,q;
inti=0;
p=newchar[N];
//allocatememoryforaarray为数组分配动态内存空间
if(p==NULL)
{cout<
Allocationerror\n"
;
return1;
}
cin>
q;
while(q!
='
#'
)
{p[i++]=q;
}
endl<
Hereisnameatp:
"
i=0;
while(i<
N)
p[i++];
delete[]p;
//releasememory释放new分配的动态内存空间
1.10
voidf(inta[],intn,int&
max,int&
min)
max=min=a[0];
for(inti=1;
i<
n;
i++)
{
if(max<
a[i])max=a[i];
if(min>
a[i])min=a[i];
voidmain()
inta[10]={2,5,3,9,0,8,1,7,6,4};
intmax,min;
f(a,10,max,min);
Max:
max<
Min:
min<
第2章
2.1C++语言中类class和结构struct的主要区别是什么?
【解答】在C++中,对结构体做了一个很重要的扩充,即允许结构体包含函数成员。
如此一来,我们可以使用结构体中的数据成员描述对象的属性,使用结构体中的函数成员描述对象的操作。
2.2什么是类的接口,什么是类的实现?
一般把仅含函数原型的类声明部分称为类的接口;
一个类的内部数据结构和其所有成员函数的定义部分称为类的实现。
2.3公用public成员和私有private成员有何区别?
私有private成员只能被该类中的其他成员访问,而程序中的其它代码是不能直接访问这些变量的。
公用public成员既可以被该类的其他成员访问,也可以被程序中的其它代码访问。
类中的公用成员对外部代码是开放的,通常情况下,程序中的其它代码通过类的公用成员函数来访问类的私有成员。
2.4构造函数和析构函数的主要作用是什么?
它们各自有什么特性?
构造函数是类的一种特殊成员函数,用来为对象进行初始化(给对象的成员变量赋初值、申请一些
系统资源、打开文件操作等)。
在对象生成的时候自动执行初始化,这会消除任何错误地不执行初始化的可能。
这是C++面向对象程序设计帮助减少复杂性的另一途径。
析构函数的作用与构造函数正好相反,当对象被删除时,利用析构函数进行一些善后处理。
一般情况
下析构函数执行构造函数的逆操作,例如可以利用析构函数来释放构造函数所动态申请的内存空间。
2.5使用const修饰作为参数的对象引用有什么好处?
2.6
classcounter{
intvalue;
public:
counter(intnumber){value=number;
}
voidincrement(){value++;
}//给原值加1
voiddecrement(){value--;
}//给原值减1
intgetvalue(){returnvalue;
}//取得计数器的值
voidprint(){cout<
”valueis:
value;
}//显示计数器的值
};
voidmain()
{counterCount(10);
Count.increment();
Count.print();
Count.decrement();
Count.getvalue();
2.7试定义一个字符串类my_string,使其至少具有内容(contents)和长度(length)两个数据成员,并具有显示字符串,求字符串长度、给原字符串后添加一个字符串等功能。
string.h>
classmy_string{
private:
char*contents;
intlength;
my_string(char*s);
voidshow();
intgetlength();
voidadd(char*s);
my_string:
:
my_string(char*s)
{contents=newchar[strlen(s)+1];
strcpy(contents,s);
length=strlen(s);
voidmy_string:
show()
{cout<
contents<
intmy_string:
getlength()
{returnlength;
add(char*s)
{strcat(contents,s);
voidmain()
{my_stringST("
Iam"
);
ST.getlength()<
ST.show();
ST.add("
astudent"
2.8定义一个矩形类Rectangle,它有长length和宽width两个属性,有成员函数计算矩形的面积。
并在main()函数中测试这个类。
-
classRectangle{
intwidth;
Rectangle(intl,intw);
intarea();
Rectangle:
Rectangle(intl,intw)
{length=l;
width=w;
intRectangle:
area()
{return(length*width);
{RectangleRect(10,15);
Areais:
Rect.area()<
第3章
3.1解释下列名词:
类对象方法消息
类:
“类”是对一组具有共同属性特征和行为特征的对象的抽象。
一个类中所包含的方法和数据描述了一组对象的共同行为和属性。
对象:
面向对象软件系统中的对象是基本的运行时(runtime)实体,它既包含数据,也包括作用于数据的操作。
面向对象软件系统中的对象是现