标签:cout int double void C++ 期末考试 复习资料 public 函数
一、单项选择题
下面每题的选项中,只有一个是正确的,请选择正确的答案填入答题纸中对应的题号后 (本题共25小题,每小题1分,共25分)。
1、当一个函数无返回值时,函数的类型应定义为( )。
A void B 任意 C int D无
2、作用域运算符的功能是( )。
A 标识作用域的级别 B 指出作用域的范围
C 给定作用域的大小 D 标识某个成员是属于哪个类
3、下列的( )是引用调用。
A 形参是指针,实参是地址值 B 形参和实参都是变量
C 形参是数组名,实参是数组名 D 形参是引用,实参是变量
4、( )不是构造函数的特征
A 构造函数的名和类名相同 B 构造函数可以重载。
C 构造函数可以设置默认值 D 构造函数必须指定类型说明。
5、下列( )不能作为类的成员。
A 自身类对象的指针 B 自身类对象的引用
C 自身类对象 D 另一个类的对象
6、重载函数在调用时选择的依据,( )是错误的。
A. 参数个数 B 参数的类型
C A或者B D 函数的类型
7、下列静态成员的特性中,( )是错误的。
A 说明静态成员时,要加修饰符static
B 静态数据成员要在类体外进行初始化
C 引用静态数据成员时,要在静态数据成员名前加<类名>及作用域运算符
D 静态数据成员不是所有对象所共用的
8、已知f1(int)是类A的公有成员函数,p是指向成员函数f1()的指针,采用( )是正确的。
A p=f1 B p=A::f1 C p=A::f1() D p=f1()
9、运算符->*的功能是( )。
A 用来表示指向对象指针对指向类成员指针的操作
B 用来表示对象对指向类成员指针的操作
C 用来表示指向对象指针对类成员的操作
D 用来表示对象类成员的操作
10、下列定义中,( )是定义指向数组的指针p.
A int p[5] B int (p)[5] C (int)p[5] D int *p[ ]
11、设p为一个指向类A数据成员m的指针,A1为A的一个对象。如果给m赋值5,( )为正确的。
A A1.p=5 B A1->p=5 C A1.*p=5 D *A1.p=5
12、已知print( ) 函数是一个类的常成员函数,它无返回值。下列表示中,( )是正确的。
A void print ( ) const B const void print ( )
C void const print ( ) D void print (const)
13、说明const char * ptr; 中,ptr应该是( )。
A 指向字符常量的指针 B 指向字符的常量指针
C 指向字符串常量的指针 D 指向字符串的常量指针
14、派生类的对象对它的基类成员中( )是可以访问的。
A 公有继承的公有成员 B 公有继承的私有成员
C 公有继承的保护成员 D 私有继承的公有成员
15、 下列对派生类的描述中,( )是错的。
A 一个派生类可以作为另一个派生类的基类
B 派生类至少有一个基类
C 派生类的成员除了它自己的成员以外,还包含了它的基类成员
D 派生类中继承的基类成员的访问权限到派生类保持不变
16、对于 int * pa[5]; 的描述,( )是正确的。
A pa是一个指向数组的指针,所指向的数组是5个int型元素。
B pa是一个指向某数组中第5个元素的指针,该元素是int型变量。
C pa[5]表示某个数组的第5个元素的值。
D pa是一个具有5个元素的指针数组,每个元素是一个int型指针。
17、 设置虚基类的目的是( )。
A 简化程序 B 消除二义性 C 提高运行效率 D 减少目标代码
18、 带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚函数的子对象初始化( )。
A 与虚基类下的派生类个数有关 B 多次 C 二次 D 一次
19、 下列函数中,( )不能重载。
A 成员函数 B 非成员函数 C 析构函数 D 构造函数
20、 关于动态联编的描述中,( )是错误的。
A 动态联编是以虚函数为基础的
B 动态联编是在运行时,确定所调用的函数代码的。
C 动态联编调用函数操作是指向对象的指针或对象引用。
D 动态联编是在编译时确定操作函数的。
21、关于虚函数的描述中,( )是正确的。
A 虚函数是一个非satatic类的成员函数。
B 虚函数是一个非成员函数。
C 基类中说明了虚函数后,派生类中与其对应的函数可以不必说明为虚函数。
D 派生类的虚函数与基类的虚函数具有不同的参数个数和类型。
22、关于纯虚函数和抽象类的描述中,( )是错误的。
A 纯虚函数是一种特殊的虚函数,它没有具体的实现。
B 抽象类是指含有纯虚函数的类。
C 一个基类中说明了纯虚函数,则其派生类不再是抽象类。
D 抽象类一般只能作为基类来使用。
23、下列关于抽象类的使用中,( )是错误的。
A 可以定义抽象类的对象 B 可以定义抽象类的指针
C 可以定义抽象类的引用 D 可以定义抽象类的派生类
24、派生类的构造函数的成员初始化列表中,不能包含( )。
A 基类的构造函数
B 派生类中子对象的初始化
C 基类的子对象的初始化
D 派生类中一般数据成员的初始化
25、关于new运算符的下列描述中,( )是错的。
A 它可以用来动态创建对象和对象数组;
B 使用它创建的对象或对象数组可以使用delete运算符删除;
C 使用它创建对象时要调用构造函数;
D 使用它创建对象数组时,必须指定初始值。
二、填空题
将正确的答案填入答题纸相应的题号后。(本题共 3小题,5个空,每空2分,共10分)
- 面向对象的程序设计有三大特征,它们是封装、 (1 ) 、 (2 ) 。
2、类是用户定义的类型,具有类类型的变量称作 (3) 。
3、在面向对象的程序设计中,通过 (4)实现数据隐藏;通过(5)实现代码的复用。
三、分析程序的执行结果题
分析程序的执行结果,将结果按程序运行时输出形式填在答题纸对应的题号后 (本题共5小题,每题4分,共20分)。
1、 #include <iostream.h>
class M { public:
M() { x=y=0; }
M(int i, int j)
{ x=i; y=j; }
void copy(M *m);
void setxy(int i, int j)
{ x=i; y=j; }
void print() { cout<<x<<","<<y<<endl; }
private:
int x, y;};
void M::copy(M *m)
{ x=m->x; y=m->y;}
void fun(M m1, M m2)
{ m1.setxy(12, 15);
m2->setxy(22,25);
}
void main()
{ M p(5, 7), q;
q.copy(&p);
fun(p, &q);
p.print();
q.print();
}
2、#include <iostream.h>
class M
{public:
M(){a=b=0;}
M(int i,int j){a=i;b=j;}
void print() {cout<<a<<","<<b<<"\t";}
private:
int a,b;
};
void main()
{ M m[2][4]; int x=10,y=10;
for(int i=0;i<2;i++)
{ for(int j=0;j<4;j++)
{ m[i][j]=M(x+=2,y+=10);}
}
M (pm)4;
for(i=0;i<2;i++)
{ cout<<endl;
for(int j=0;j<4;j++)
(((pm+i)+j)).print();//用指针的方式存取数组的第ij个元素
} cout<<endl;
}
3、#include <iostream.h>
#include <string.h>
class B
{ public:
B(char *s, double n)
{ strcpy(name,s);
b=n;
cout<<“Constructor. \n”;
}
B(){cout<<“Default\n”;}
~B(){cout<<“Destructor “<<name<<endl;}
void getb(char s, double& n)
{ strcpy(s,name); n=b; }
private:
char name[80];
double b;
};
void main()
{ B p;
double n;
char s[80];
p=new B[3];
p[0]=B(“Ma”,4.8);
p[1]=B(“Wang”,3.6);
p[2]=B(“Li”,3.1);
for(int i=0;i<3;i++)
{ p[i].getb(s,n);
cout<<s<<”,”<<n<<endl;
}
delete[] p;
}
4、#include <iostream.h>
class A
{
public:
A(int i,int j) {a=i;b=j;}
void Move(int x,int y) {a+=x;b+=y;}
void Show() {cout<<"("<<a<<","<<b<<")"<<endl;}
private:
int a,b;
};
class B:public A
{
public:
B(int i,int j,int k,int l):A(i,j),x(k),y(l)
{}
void Show() {cout<<x<<","<<y<<endl;}
void fun() {Move(3,5);}
void f1() {A::Show();}
private:
int x,y;
};
void main()
{
A e(1,2);
e.Show();
B d(3,4,5,6);
d.A::Show();
d.B::Show();
d.f1();
}
5、#include <iostream.h>
class A
{ public:
A(int i){a=i;cout<<“con. A\n”;}
void print(){cout<<a<<endl;}
~A(){cout<<“des. A\n”;}
private:
int a;
};
class B1 : virtual public A
{ public:
B1(int i, int j) : A(i){b1=j;cout<<“con. B1\n”;}
void print(){A::print(); cout<<b1<<endl;}
~B1(){cout<<“des. B1\n”;}
private:
int b1;
};
class B2 : virtual public A
{ public:
B2(int i, int j) : A(i){b2=j;cout<<“con. B2\n”;}
void print(){A::print(); cout<<b2<<endl;}
~B2(){cout<<“des. B2\n”;}
private:
int b2;
};
class C : public B1, public B2
{ public:
C(int i, int j, int k, int l) : B1(i,j), B2(i,k), A(i)
{ c=l; cout<<“con. C”<<endl; }
void print()
{ B1::print(); B2::print();cout<<c<<endl; }
~C(){cout<<“des. C”<<endl;}
private:
int c;
};
void main()
{
C c1(5,7,3,6);
c1.print();
}
四、程序设计题
将编写的程序标上小题题号,写在答题纸上。本题共4小题, 45分。
1.编写一个程序,设计一个产品类Product,其定义如下:
Class Product
{
char *name; //产品名称
int price; //产品单价
int quantity; //剩余产品数量
public:
Product(char *n,int p,int q); //构造函数
~Product(); //析构函数
void buy(int money); //购买产品
void get() const; //显示剩余产品数量
};
并用数据进行测试。(10分) - 以面向对象的方法设计一个类,此类包含3个私有数据:unlead,lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油的价格是17元/公升,有铅汽油的价格是16元/公升),请以构造函数方式建立此值。试输入某天所加的汽油量,本程序将列出加油站当天的总收入。(10分)
- 编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数。(12分)
- 编一个程序计算正方体,球体和圆柱体的表面积和体积。要求:抽象出一个公共基类container为抽象类,在其中定义求表面积和体积的纯虚函数。抽象类中定义一个公共的数据成员radius,此数值可以作为球体的半径、正方体的边长、圆柱体底面圆半径。由该抽象类派生出的三个类,都有求表面积和体积的实际定义。键盘输入radius的值后,可以输出这3种立方体的面积。(13分)
<PIXTEL_MMI_EBOOK_2005>8 </PIXTEL_MMI_EBOOK_2005>
答案:
一、 选择题(25小题,共25分)
1 A 6 D 11 C 16 D 21 C
2 D 7 D 12 A 17 B 22 C
3 D 8 B 13 C 18 D 23 A
4 D 9 A 14 A 19 C 24 C
5 C 10 B 15 D 20 D 25 D
二、 填空题( 每空2分,共10分)
1 继承
2 多态
3 对象
4 封装
5 继承
三、 分析程序的执行结果,填空 (5小题,每小题4分,共20分)
1. 5,7
22,25
2. 12,20 14,30 16,40 18,50
20, 60 22,70 24,80 26,90
3. Default
Default
Default
Constructor.
Destructor Ma
Constructor.
Destructor Wang
Constructor.
Destructor Li
Ma, 4.8
Wang, 3.6
Li, 3.1
Destructor Li
Destructor Wang
Destructor Ma
5. con. A
con. B1
con. B2
con. C
5
7
5
3
6
des. C
des. B2
des. B1
des. A
四. 程序设计题 (4小题,共45分)
-
编写一个程序,设计一个产品类Product,其定义如下:
class Product
{
char *name; //产品名称
int price; //产品单价
int quantity; //剩余产品数量
public:
Product(char *n,int p,int q); //构造函数
~Product(); //析构函数
void buy(int money); //购买产品
void get() const; //显示剩余产品数量
};
并用数据进行测试。(10分)
#include <iostream.h>
#include <string.h>
class Product
{
char *name;
int price;
int quantity;
public:
Product(char *n,int p,int q)
{
name =new char[strlen(n)+1];
strcpy(name,n);
price=p;
quantity=q;
}
~Product()
{
if(name)
{
delete [] name;
name=0;
}
}
void buy(int money)
{
int n,r;
n=money/price;
if(n>quantity)
cout<<“数量不够”<<endl;
else
{
quantity-=n;
r=money%price;
cout<<“产品:”<<name<<“单价:”<<price<<“元 顾客”;
cout<<money<<“元,买了”<<n<<“台,剩余”<<r<<“元”<<endl;
}
}
void get() const
{
cout<<“产品:”<<name<<“单价:”<<price<<“元 剩余”<<quantity<<“台”<<endl;
}
};
void main()
{
Product p1(“电视机”,2000,15);
p1.buy(7000);
p1.get();
p1.buy(4500);
p1.get();
} -
以面向对象的方法设计一个类,此类包含3个私有数据:unlead,lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油的价格是17元/公升,有铅汽油的价格是16元/公升),请以构造函数方式建立此值。试输入某天所加的汽油量,本程序将列出加油站当天的总收入。 (10分)
#include <iostream.h>
class Tc
{
private:
double unlead,lead,total;
int unprice,price;
public:
Tc(){unprice=17;price=16;}
void getdata()
{
cout<<“无铅汽油总量;”;
cin>>unlead;
cout<<“有铅汽油总量;”;
cin>>lead;
total=unpriceunlead+pricelead;
}
void disp()
{
cout<<“总收入:”<<total<<endl;
}
};
void main()
{
Tc A;
A.getdata();
A.disp();
} -
编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数。(12分)
#include <iostream.h>
#include <iomanip.h>
class rectangle
{
private:
float ledge,sedge;
public:
rectangle(){};
rectangle(float a,float b)
{
ledge=a;
sedge=b;
};
float area()
{
return ledgesedge;
};
void addarea(rectangle r1,rectangle r2)
{
cout<<“总面积:”<<r1.ledger1.sedge+ r2.ledge*r2.sedge<<endl;
}
};
void main()
{
rectangle A(3.5,2.5),B(4.2,3.8),C;
C.addarea(A,B);
} -
编一个程序计算正方体,球体和圆柱体的表面积和体积。要求:抽象出一个公共基类container为抽象类,在其中定义求表面积和体积的纯虚函数。抽象类中定义一个公共的数据成员radius,此数值可以作为球体的半径、正方体的边长、圆柱体底面圆半径。由该抽象类派生出的三个类,都有求表面积和体积的实际定义。键盘输入radius的值后,可以输出这3种立方体的面积。(13分)
#include <iostream.h>
class Circle
{
public:
Circle(double i) {r=i;}
double Area(double r) {a=rr3.14159; return a;}
void Show() {cout<<“area=”<<Area®<<endl;}
private:
double r,a;
};
class Rectangle
{
public:
Rectangle(double i,double j)
{ l=i;w=j;}
double Area(double i,double j) {a=i*j; return a;}
void Show() {cout<<“area=”<<Area(l,w)<<endl;}
private:
double l,w,a;
};
class Graph:public Circle, public Rectangle
{public:
Graph(double i, double j, double k):Circle(i),Rectangle(j,k)
{r=i;l=j;w=k;}
double Area(double r,double l,double h) {a=Circle::Area®+Rectangle::Area(l,h); return a;}
void Show() {cout<<“area=”<<Area(r,l,w)<<endl;}
private:
double r,l,w,a;
};
void main()
{
Circle c(10);
c.Show();
Rectangle rec(20,50);
rec.Show();
Graph g(10.0,20.0,50.0);
g.Show( );
}
标签:cout,int,double,void,C++,期末考试,复习资料,public,函数 来源: https://blog.csdn.net/weixin_44203971/article/details/113806672
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。