…………试卷装订线 ……………… 装订线内不要答题,不要填写考生信息………………试卷装订线 …………
姓  名
学 号
专业班级
学院
重点大学考试试卷(A卷)
2018  ~2019 学年 1 学期 面向对象程序设计课程 
时间120分钟,    学时,  学分,总分100分,占总评成绩100%    年 月 日
题号
合计
满分
20
18
24
38
100
得分
得分
                一、单选题(每小题2分,共20分,本题答案填入下表中)
1. 在C++中,下列语句,错误的是(      )。
A.  int  a(3);            B.  int a[3];
C.  int &a;              D.  int *a;
2. 派生类中的成员函数可以直接访问基类的(      ) 。
A. 公有成员                    B. 私有成员
C. 公有和保护成员              D. 保护成员
3. 在C++中,关于类的析构函数,正确的说法是(    )。
A.能带形式参数    B.函数体中必须有 delete 语句
C.可以被重载      D.无形参,也不可重载
4. 一个类拥有多个构造函数,则这些构造函数之间为(      )。
A.重复关系              B.拷贝关系
C.重载关系              D.继承关系
5. C++中声明常量的关键字是(      )。
A.extern      B.const      C.public        D.volatile
6. 一个函数功能不太复杂,但要求被频繁调用,该函数应该设计成(    ) 。
A.内联函数            B.重载函数
C.递归函数            D.嵌套函数
7. 以下基类中的成员函数表示纯虚函数的是(      )。
A. virtual void tt()=0  B. void tt(int)=0
C. virtual void tt(int) D. virtual void tt(int){}

8. 可以在类外用p.a的形式访问派生类对象p的基类成员a,其中a是(    )。
A.公有继承的公有成员;            B.公有继承的私有成员;
C.公有继承的保护成员;            D.私有继承的公有成员。                                 
9. 对于任意一个类,析构函数的个数最多为(      )
    A.0              B.1              C.2              D.3
10. 对于在类中定义的静态数据成员count,下面正确的说法是(    )   
A.count在类外进行初始化   
B.该类的每个对象中都有一个独立的静态数据成员count 
C. 对象创建时产生count   
D.count既可以在类外初始化,也可以在类内初始化 
得分B)10,10 C)20,10 D)20,20得分
二、改错题(共3小题,每小题6分,共18分)
1.下面的程序在VC6.0上编译提示error C2440: 'type cast' : cannot convert from 'class Complex' to 'float',No user-defined-conversion operator available that can perform this conversion,请指出错误原因并改正。
#include <iostream>
using namespace std;
class Complex{
public:
    Complex(float r=0,float i=0)
    {real=r;    imag=i; }
    void print()
    {cout<<'('<<real<<','<<imag<<')'<<endl;}
private:
    float real,imag;
};
int main()
{    Complex a(2.2f, 4.4f);
    a.print();
    cout<<float(a)*0.5<<endl;
    return 0;
}
2.下面的程序在VC6.0上编译提示error C2662: 'getX' : cannot convert 'this' pointer
from 'const class CTest' to 'class CTest &',请指出错误原因并改正。
#include<iostream>
using namespace std;
class CTest
{private:
    int x;
public:
    CTest(int x)
    { this->x = x; }
    int getX()
    { return x; }
};
int main()
{  const CTest obj(5);
    cout<&X()<<endl;
    return 0;
}
3. 下面的程序在VC6.0上编译无错,运行结果出错:“p1:葺葺葺葺葺葺葺葺”,请指出错误原因并改正。
#include <iostream>
#include<cstring>
using namespace std;
class STRING {
public:
    STRING(char *s)
    {
        ptr=new char[strlen(s)+1];
        strcpy(ptr,s);
    }
    ~STRING()
    {  delete ptr; }
    void print()
    {  cout<<ptr<<endl; }
编程递归函数private:
    char *ptr;
};
int main()
{ STRING p1("book");
  {  STRING p2("pen");
        p1=p2;
  }
    cout<<"p1:";
    p1.print();
    return 0;
}
得分
三、读程序,给出程序的输出结果。(每小题6分,共24分)
【1】#include <iostream>
using namespace std;
class Person{
public:
  Person() { cout<<"Constructor of Person"<<endl; }
  ~Person() { cout<<"Destructor of Person"<<endl; }
};
class Student: public Person{
public:
  Student() { cout<<"Constructor of Student"<<endl; }
  ~Student() { cout<<"Destructor of Student"<<endl; }
};
class Teacher: public Person{
public:
  Teacher() { cout<<"Constructor of Teacher"<<endl; }
  ~Teacher() { cout<<"Destructor of Teacher"<<endl; }
};
int main(){
  Student s;
  Teacher t;
  return 0;
}
…………试卷装订线 ……………… 装订线内不要答题,不要填写考生信息………………试卷装订线 …………
            …………试卷装订线 ……………… 装订线内不要答题,不要填写考生信息………………试卷装订线 …………
【2】#include <iostream>
using namespace std;
class A
{  public:
    A (int i) { x = i; }
    void dispa () { cout << x << ","; }
  private :
    int x ;
};
class B : public A
{  public:
    B(int i) : A(i+10) { x = i; }
    void dispb() { dispa(); cout << x << endl; }
  private :
    int x ;
};
int main(){
    B b(2);
    b.dispb();
    return 0;
}
【3】#include<iostream.h>
  class Count{
    static int count ;
  public:
    Count( ) {cout<<count++ ;}
    static int Getc( ) { return count ;}
    ~Count( ) {count--;}
  };
  int Count::count = 5;
  int main()  { Count c1,c2,c3,c4 ;
    cout<<Count::Getc( )<<endl;
    return 0;
  }
【4】#include<iostream>
using namespace std;
class MyClass{
public:
MyClass(int i=0){cout<<1;}
MyClass(const MyClass&x){cout<<2;}
MyClass& operator=(const MyClass&x){cout<<3; return *this;}
~MyClass(){cout<<4;}
};
int main(){
MyClass obj1(1),obj2(2),obj3(obj1);
obj1=obj2;
return 0;
}
得分
四、编程题(共38分)
1.下面是一个类的测试程序,请设计出能使用如下测试程序的类。  (12分)
int main()
{ Test a;
  a.init(68,55);
  a.print();
return 0;
}
其执行结果为:
测试结果:68-55=13
            …………试卷装订线 ……………… 装订线内不要答题,不要填写考生信息………………试卷装订线 …………
2.请为fraction类(分数类)定义下列重载运算符函数(注意函数原型)(12分)
⑴加法运算+。
⑵赋值运算=。
⑶提取运算>>。
class fraction
{ private:
int fz; //分子
int fm; //分母
public:
};
3.创建一个表示雇员信息的employee类,其中包含数据成员name、empNo和salary,分别表示雇员的姓名、编号和月薪。再从employee类派生出3个类worker、technician和salesman,分别代表普通工人、科研人员、销售人员。三个类中分别包含数据成员productNum、workHours和monthlysales,分别代表工人每月生产产品的数量、科研人员每月工作的时数和销售人员每月的销售额。要求各类中都包含成员函数pay,用来计算雇员的月薪,并假定:
普通工人的月薪=每月生产的产品数×每件产品的赢利×20%
科研人员的月薪=每月的工作时数×每小时工作的酬金 
销售人员的月薪=月销售额×销售额提成。    (14分)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。