return0;
}
if(Fun(a)*Fun((a+b)/2)<0)
{
b=(a+b)/2;
}
if(Fun(b)*Fun((a+b)/2)<0)
{
a=(a+b)/2;
}
}
return0;
}
3.1类声明的一般格式是什么?
class类名
{
[private:
]
私有数据成员和成员函数
public:
公有数据成员和成员函数
}
3.2构造函数和析构函数的主要作用是什么?
它们各自有什么特性?
构造函数是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。
构造函数的名字必须与类名相同,而不能由用户任意命名。
它可以有任意类型的参数,但不能具有返回值类型。
析构函数通常用于执行一些清理任务,如释放分配给对象的内存空间等。
析构函数名与类名相同,但它前面必须加一个波浪号。
不能有返回值,也不能有参数。
3.3什么是对象数组?
所谓对象数组,是指每一个数组元素都是对象的数组。
3.4什么是this指针?
它的主要作用是什么?
C++为成员函数提供了一个名为this的指针,这个指针称为自引用指针。
每当创建一个对象时,系统就把this指针初始化为指向该对象。
一个类的所有对象合用一份成员函数,this指针可以帮助对象辨别出当前调用的是自己的那个对象的数据成员和函数。
3.5友元函数有什么作用?
友元函数可以在类的外部访问类的私有成员或保护成员。
3.6
(1)声明并定义了P2,P3,并用默认无参构造函数初始化。
(2)声明并定义了P2,并调用Point类的拷贝构造函数用P1对P2进行初始化。
(3)声明并定义了P2,并调用Point类的拷贝构造函数用P1对P2进行初始化。
(4)调用拷贝构造函数,将P1的成员值赋值给P4的成员。
3.7-3.10BCCB
3.11-3.15BAABA
3.16-3.17BB
3.18
10,20
30,48
50,68
70,80
90,16
11,120
3.19
Constructing
10
100
Destructing
3.20
3objectsinexistence
4objectsinexistenceafterallocation
3objectsinexistenceafterdeletion
3.21
Countingat0
Countingat9
3.22
Defaultconstructorcalled.
Defaultconstructorcalled.
Defaultconstructorcalled.
Construcotor:
a=1,b=2
Construcotor:
a=3,b=4
Construcotor:
a=5,b=6
3.23
Con.
Copycon.
default.
Copycon.
3.24
A=5
B=14
A=9
B=14
3.25
5,7
22.25
3.26
Constructing
Constructing
A=5
B=15
A=10
B=15
Destructing
Destructing
3.27
voidpintStu();函数只有声明,没有定义。
age是私有成员,不能用对象直接调用。
3.28
voidprintStu()和voidsetSno(ints)没有加限定符Student:
:
voidsetAge(inta)在类中没有声明
3.29
构造函数不能定义为私有。
否则无法创建对象。
3.30下面是一个计算器类的定义,请完成该类成员函数的实现。
classcounter
{
public:
counter(intnumber);
voidincrement();//给原始值加1
voiddecrement();//给原始值减1
intgetvalue();//取的计数器值
intprint();//显示计数
private:
intvalue;
};
counter:
:
counter(intnumber)
{
value=number;
}
voidcounter:
:
increment()
{
++value;
}
voidcounter:
:
decrement()
{
--value;
}
intcounter:
:
getvalue()
{
returnvalue;
}
intcounter:
:
print()
{
cout<returnvalue;
}
3.31根据注释语句提示,实现类Date的成员函数
#include
usingnamespacestd;
classDate
{
public:
voidprintDate();
voidsetDay(intd);
voidsetMonth(intm);
voidsetYear(inty);
private:
intday,month,year;
};
voidDate:
:
printDate()
{
cout<<"今天是"<}
voidDate:
:
setDay(intd)
{
day=d;
}
voidDate:
:
setMonth(intm)
{
month=m;
}
voidDate:
:
setYear(inty)
{
year=y;
}
intmain()
{
DatetestDay;
testDay.setDay(5);
testDay.setMonth(10);
testDay.setYear(2003);
testDay.printDate();
return0;
}
3.32建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。
用类cylinder计算圆柱体的体积,并存储在一个double变量中。
在类cylinder中包含一个成员函数vol,用来显示每个cylinder对象的体积。
constintPI=3.14;
classcylinder
{
private:
doubleradius,height,volume;
public:
cylinder(intrad,inthei);
doublegetVolume();
voidvol();
};
cylinder:
:
cylinder(intrad,inthei)
{
radius=rad;
height=hei;
}
doublecylinder:
:
getVolume()
{
volume=PI*radius*radius*height;
returnvolume;
}
voidcylinder:
:
vol()
{
cout<<"圆柱体的体积是:
"<}
3.33构建一个类book,其中包含有两个私有数据成员qu和price,将qu初始化为1~5,将price初始化为qu的10倍,建立一个有5个元素的数组对象。
显示每个对象数组元素的qu*price值。
classbook
{
private:
intqu,price;
public:
book(intqu);
intmult();
};
book:
:
book(intq)
{
if(q<1||q>5)
{
qu=1;
}
else
{
qu=q;
}
price=10*qu;
}
intbook:
:
mult()
{
returnqu*price;
}
intmain()
{
bookbooks[5]={1,2,3,4,5};
for(inti=0;i<5;i++)
{
cout<}
}
3.34修改3.33,通过对象指针访问对象数组,使程序以相反的顺序显示每个对象数组元素的qu*price值。
classbook
{
private:
intqu,price;
public:
book(intqu);
intmult();
};
book:
:
book(intq)
{
if(q<1||q>5)
{
qu=1;
}
else
{
qu=q;
}
price=10*qu;
}
intbook:
:
mult()
{
returnqu*price;
}
intmain()
{
bookbooks[5]={1,2,3,4,5};
book*p=books;
p+=4;
for(inti=0;i<5;i++)
{
cout<mult()<<"";
--p;
}
return0;
}
3.35构建一个类Stock,含字符数组stockcode[]及整型数组成员quan、双精度型数据成员price。
构造函数含3个参数:
字符数组na[]及q、p。
当定义Stock的类对象时,将对象的第一个字符串参数赋给数据成员stockcode,第2和第3个参数分别赋给quan、price。
未设置第2和第3个参数时,quan的值为1000,price的值为8.98.成员函数print没有形参,需使用this指针,显示对象数据成员的内容。
编写程序显示对象数据成员的值。
#include
usingnamespacestd;
classStock
{
private:
charstockcode[25];
intquan;
doubleprice;
public:
Stock(charna[],intq=1000,doublep=8.98);
Stock(charna[]);
voidprint();
};
Stock:
:
Stock(charna[],intq=1000,doublep=8.98)
{
strcpy(stockcode,na);
quan=q;
price=p;
}
voidStock:
:
print()
{
cout<<"stockcode:
"<stockcode<<"quan:
"<quan<<"price:
"<price<}
intmain()
{
Stockstock1("600001",3000,5.67);
Stockstock2("600002