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");
stock1.print();
stock2.print();
return0;
}
3.36编写一个程序,已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据成员表示)。
#include
usingnamespacestd;
classstudent
{
private:
charname[25],studentNo[10];
intscore;
staticintsum;
staticinttotalScore;
public:
student(charna[],charstuNo[],intsc);
voidshow();
staticvoidshowTotal();
};
student:
:
student(charna[],charstuNo[],intsc)
{
strcpy(name,na);
strcpy(studentNo,stuNo);
score=sc;
++sum;
totalScore+=sc;
}
voidstudent:
:
show()
{
cout<<"姓名:
"<cout<<"学号:
"<cout<<"成绩:
"<}
voidstudent:
:
showTotal()
{
cout<<"总人数:
"<cout<<"平均成绩:
"<<(double)totalScore/sum<}
intstudent:
:
sum=0;
intstudent:
:
totalScore=0;
intmain()
{
students1("张无忌","111254",75);
students2("李莫愁","254114",60);
students3("小龙女","112587",88);
s1.show();
s2.show();
s3.show();
student:
:
showTotal();
return0;
}
4.1有哪几种继承方式每种方式的派生类对基类成员的继承性如何
公有继承,私有继承和保护继承。
基类的私有成员,无论哪种继承方式都不能访问。
公有继承不改变基类的公有和保护成员的访问限制。
私有继承将基类的公有和保护成员都变成私有。
保护继承将基类的公有和保护成员都变成保护。
4.2派生类能否直接访问基类的私有成员若否,应如何实现
不能。
可以在基类里添加一个公有成员函数来访问私有成员,派生类就能继承这个公有成员函数,实现对基类私有成员的访问。
4.3保护成员有哪些特性保护成员以公有方式或私有方式继承后的访问特性如何
保护成员只能被本类或本类的派生类所访问,在类或派生类外是不能被访问的。
后面一问见第一题的答案。
4.4派生类构造函数和析构函数的执行顺序是怎样的?
构造函数是先执行父类的构造函数,再执行类中其他类对象的构造函数,再执行本类的构造函数。
如果同级有多个构造函数,则按声明顺序执行。
析构函数与构造函数的执行顺序刚好相反。
4.5派生类构造函数和析构函数的构造规则是怎样的?
派生类名(参数总表):
基类名(参数总表)
{
派生类新增数据成员的初始化语句
}
派生类中的析构函数与基类无关。
4.6什么是多继承多继承时,构造函数与析构函数的执行顺序是怎样的
多继承是指一个类同时继承自多个不同的基类。
执行顺序同4.4
4.7在类的派生中为何要引入虚基类