资源描述
单项选择题(每题2分,共10道,共20分)
1.D 2.D 3.B 4.A 5.B
6.D 7.D 8.A 9.A 10.C
填空题(每空1分,共10个空,共10分)
1.public、private、protected (顺序任意)
2.静态
3.inline 或内联
4.友元函数
5.函数模板、类模板(顺序可以颠倒)
6.纯虚函数
7.throw
简答题(共3道小题,共10分)
1.答:
(1) 在public派生下,基类中的public成员在派生类中是公有的,基类中的private 成员在派生类中是不可直接访问的,基类中的protected成员在派生类中是protected的。(2分)
(2)在private派生下,基类中的public成员在派生类中是私有的,基类中的private 成员在派生类中是不可直接访问的,基类中的protected成员在派生类中是私有的。(1分)
(3) 在protected派生下,基类中的public成员在派生类中是protected的,基类中的private 成员在派生类中是不可直接访问的,基类中的protected成员在派生类中是protected的。(1分)
2.答:
(1)生存期是指对象从建立到销毁的期间。(1分)
(2)C++中包括静态生存期(1分)和动态生存期(1分)
3.答:
调用顺序如下:
按照继承时声明顺序调用基类的构造函数(1分)
如果有内嵌对象成员,按照声明顺序构造这些对象成员(1分)
调用自己的构造函数体(1分)
程序分析题(每小题6分,共5道小题,共30分)
解:
n=10,k=3 (2分)
n=20,k=3 (2分)
n=30,k=3 (2分)
该类定义有如下3处错误:
(1)构造函数说明错误,应将Sample(int a=0,b=1)改为Sample(int a=0,int b=1)
(2分)
(2)构造函数在说明时已经给出默认值,在定义时就不用再给出默认值了。
(2分)
(3)在类中说明disp时没有给出数据类型,在定义时也要一致。(2分)
解:Sample是一个类模板(2分),产生一个模板类 Sample <int>,并建立它的三个对象,调用重载运算符“+”实现s1与s2的加法运算,将结果赋给s3。(2分)所以输出为:n=30。(2分)
运行结果为:
A Constructor2 (2分)
B Constructor2 (2分)
x1=12 (1分)
x2=2 (1分)
结果如下:
B fun1 (1分)
A fun2 (1分)
A fun3 (2分)
A fun4 (2分)
编程题(共3道小题,共20分)
1.采分点如下:
(1)类的总体框架设计 (2分)
(2)类的成员函数的编写 (2分)
(3)主函数的编写 (2分)
R
#include <iostream.h>
const float unleadPrice=17.;
const float leadPrice=16.;
class petriod
{
private:
float unlead,lead,total;
public:
petriod(float ul,float l)
{
unlead=ul;
lead=l;
total=unlead*unleadPrice+lead*leadPrice;
}
float getTotal()
{
return total;
}
};
int main()
{
petriod p(100,100);
cout<<p.getTotal();
return 0;
}
2.采分点如下:
(1)建立Rectangle类 (2分)
(2)建立长方体类 (3分)
(3)主函数 (2分)
#include <iostream.h>
class Rectangle
{
private:
float length,width;
public:
Rectangle(float l,float w)
{
length=l;
width=w;
}
float area()
{
return length*width;
}
};
class Volume:public Rectangle
{
private:
float heigh;
public:
Volume(float l,float w,float h):Rectangle(l,w){heigh =h;}
float volume(){return area()*heigh;}
};
int main()
{
Rectangle r(2,3);
Volume v(2,3,5);
cout<<r.area();
cout<<v.volume();
return 0;
}
3.采分点如下:
(1)类的编写 (2分)
(2)建立对象 (1分)
(3)打开文件,写入文件 (2分)
(5)关闭并读出文件内容 (2分)
#include <iostream>
#include <fstream>
using namespace std;
class stu
{
private:
int no;
char name[10];
int grade;
int classNo;
public:
stu(){}
void setNo(int n)
{
no=n;
}
void setName(char *na)
{
strcpy(name,na);
}
void setGrade(int gr)
{
grade=gr;
}
void setClass(int cl)
{
classNo=cl;
}
int GetNo(){return no;}
char *GetName(){return name;}
int GetGrade(){return grade;}
int GetClass(){return classNo;}
};
int main()
{
stu S[2];
int sNo;
char sName[10];
int sGrade;
int sClassNo;
for(int i=0;i<2;i++)
{
cin>>sNo;
S[i].setNo(sNo);
cin>>sName;
S[i].setName(sName);
cin>>sGrade;
S[i].setGrade(sGrade);
cin>>sClassNo;
S[i].setClass(sClassNo);
}
ifstream ifile("data.txt",ios_base::in);
ofstream ofile("data.txt",ios_base::out);
for(i=0;i<2;i++)
{
ofile<<S[i].GetNo()<<S[i].GetName()<<S[i].GetGrade()<<S[i].GetClass()<<endl;
}
ofile.close();
char line[101];
for(i=0;i<2;i++)
{
ifile.getline(line,100);
cout<<line<<endl;
}
ifile.close();
}
展开阅读全文