1、第 1 页 共 11 页C+面向对象程序设计 一、选择题(每小题 2 分,共 20 分)1一个 C+类( ) 。A. 只能有一个构造函数和一个析构函数 B. 可以有一个构造函数和多个析构函数C. 可以有多个构造函数和一个析构函数D. 可以有多个构造函数和多个析构函数2. 关于类概念的描述中, ( )是错误的。A类是抽象数据类型的实现; B类是具有共同行为的若干对象的统一描述体;C类是创建对象的样板; D类不是 C+中的一种数据类型;3. 下述静态数据成员的特征中, ( )是错误的。A说明静态数据成员时前边要加修饰符 static;B.静态数据成员要在类外进行初始化;C引用静态数据成员时,要在静
2、态数据成员名前加和作用域运算符;D静态数据成员不是所有对象所共用的。4下面有关重载函数的说法中正确的是( ) A重载函数必须具有不同的返回值类型; B重载函数形参个数必须不同; C重载函数必须有不同的形参列表 D重载函数名可以不同; 5下列各类函数中, ( )不是类的成员函数A构造函数 B. 析构函数 C. 友元函数 D. 复制构造函数6下面描述中,表达错误的是( ) A公有继承时基类中的 public成员在派生类中仍是 public的 B公有继承是基类中的 private成员在派生类中仍是 private的 C公有继承时基类中的 protected成员在派生类中仍是 protected的 D
3、私有继承时基类中的 public成员在派生类中是 private的 7. 在 C+中,关于下列设置参数默认的描述中, ( )是正确的。第 2 页 共 11 页A.不允许设置参数的默认值;B.设置参数默认值只能在定义函数时设置;C.设置参数默认值时,应该是先设置右边的再设置左边的;D.设置参数默认值时,应该全部参数都设置;8. 下列存储类标识符中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用( )合适。A. 内联函数 B. 重载函数 C. 递归调用 D. 嵌套调用9. 下列( )是引用调用。A形参是指针,实参是地址值; B形参和实参都是变量;C形参是数组名,实参是数组名; D
4、形参是引用,实参是变量。10有如下程序: include class BASE char c; public: BASE(char n):c(n) virtualBASE()coutvoid swap(int x,int void main()int a(10),b;b=a/5;coutclass AA public:AA(int i,int j)A=i;B=j;coutprint();delete pa;3、#includeclass B public:B();B(int i);B();void Print() ;private:int b;第 5 页 共 11 页B:B() b=0;cou
5、tclass CSample public:CSample();void Display();private:int i;static int k;第 6 页 共 11 页Csmaple:CSample()i=0;k+;void CSample:Display() coutclass Apublic:A(int i)m=i;void show()coutclass Date public: /* * 2 * * Date(int y,int m,int d) /* * 3 * * void print() const; private: / date members /* * 1 * *; v
6、oid Date:print()const /* * 4 * * int main() Date national_day(1949,10,1); national_day.print(); return 0; 3、用 C+语言定义 MyString(包括成员函数的实现代码) ,使之能符合下面程序及在注释中描述的运行结果的要求:main()MyString s1 = “0123456789“, s2(5), s3;s1.display(); / 此时显示出: s2.display(); / 此时显示出(s3 = s1;s3.display(); / 此时显示出: s2 = s12;s2.dis
7、play(); / 此时显示出: s1.display(); / 此时显示出: s3 = s2+;s2.display(); / 此时显示出: s3.display(); / 此时显示出: 第 8 页 共 11 页参考答案及评分标准一选择题(每小题 2 分,共 20 分)1、C 2、A 3、D 4、C 5、C 6、B 7、C 8、A 9、D 10、A二判断题(每小题 1 分,共 10 分)1、 2 、 3、 4、 5、6、 7 、 8、 9、 10、三填空题(每空 1 分,共 10 分)1、 基类成员、类对象成员、非类对象成员 2、const3、friend void F();4、析构函数5、
8、86、指针、对象、虚函数四读程序并写出程序的运行结果(每题 5 分,共 20 分)1、a=10,b=2a=10,b=102、ConstructorCopy_ ConstructorA=12,B=23ConstructorA=5,B=6DestructorDestructorDestructor 3、Bconstructor called.Cconstructor called.第 9 页 共 11 页56Cdestructor called.Bdestructor called.4、i=0,k=2i=0,k=2 五编程题(第 1 题 9 分,第 2 题 16 分,第 3 题 15 分,共 40
9、 分)1、void A():析构函数没有返回值,可改为 A();A a;:没有定义无参构造函数,可改为 A a(10);(括号中可以是任意整数。 )a.m+=10;:不能在类外访问类的私有成员,将数据成员 m 的访问权限改为 public。2、/* * 1 * *int year; int month; int day;/* * 2 * *Date() year=1;month=1;day=1; /* * 3* *year=y;month=m;day=d;/* * 4* *coutn“, cpBody); ;MyString:MyString(const char* p)第 10 页 共 11 页if (p = NULL)cpBody0 = 0;elsestrncpy(cpBody, p, 80);MyString:MyString(int i) int j;for (j = 0; j i j+)cpBodyj = ;cpBodyj = 0;MyStringint j;s = *this;for (j = i; cpBodyj != 0; j+)s.cpBodyj-i = s.cpBodyj;s.cpBodyj-i = 0;return s;第 11 页 共 11 页