(4)下面( )不是构造函数的特征。
A.构造函数可以重载; B.构造函数可以设置缺省参数;
C.构造函数的函数名和类名相同;D.构造函数必须指定返回值类型。 (5)下述静态数据成员的特性中,( )是错误的。 A. 静态数据成员要在类体外进行初始化; B. 说明静态数据成员时前边要加修饰符static; C. 静态数据成员不是所有对象所共有的; D. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符。
(6)已知类A有三个公有成员:void f1(int), void f2(int) 和int a,则( )是指向类A成员函数的指针。
A.A *p; B. int A::*pc=&A::a; C. void(A ::*pa)(int); D. A **p; (7)下列关于对象数组的描述中,( )是错的。 A.对象数组的数组名是一个地址常量; B.对象数组的下标是从0开始的; C.对象数组只能赋初值,不能被赋值;
D.对象数组的数组元素是同一个类的对象. (8)下列定义中,( )是定义指向类A的对象数组的指针。 A.A *p[5]; B.A (*p)[ 5];
C.(A *) p[5]; D.A *p[ ];
(9)说明语句const char *ptr;中,ptr是( )。 A.指向字符常量的指针; B.指向字符的常量指针;
C.指向字符串常量的指针; D.指向字符串的常量指针。 (10)关于new运算符的下列描述中,( )是错的. A.使用它创建对象时要调用构造函数; B.使用它创建对象数组时必须指定初始值; C.它可以用来动态创建对象和对象数组;
D.使用它创建的对象或对象数组可以使用运算符delete删除。
答:(1)A (2)C (3)D( 4)D( 5)C( 6)C (7)C (8)B (9)A (10)B 7.2 分析下列程序的运行结果。
(1) B c ; #include 16 答案:程序输出为7,8 (2) #include (3) #include double w,h; public: Rect(double a,double b){w=a;h=b;} friend double area(Rect &r) { return r.w * r.h; } 答案:输出为 12,10 (4) #include int elems[N]; int pc; public: Set() {pc=0;} Set (Set &s); void Empty(){pc=0;} int IsEmpty(){ return pc==0;} int IsMember(int n); int Add(int n); void print(); friend void reverse(Set *m); }; Set::Set(Set &s) { pc=s.pc; }; int Count::count = 100; void main( ) { Count c1,c2,c3,c4 ; cout< }; void main( ) { Rect r1(3.0,4.0),r2(2.0,5.0); cout< for(int i=0;i int Set::IsMember(int n) { for(int i=0;i if(elems[i]==n) return 1; return 0 ; } int Set::Add(int n) { if(IsMember(n)) return 1; else if(pc>=N) return 0; else{ elems[pc++]=n; return 1; } } void Set::print() 17 { cout<<”{“; for(int i=0;i void main() { Set a; cout< {1,2,3,4,5,6,7,8} 1 {11,12,13,14,15,16,17,18,19} (5) #include void print(); }; B::B() { x=y=0; cout<<\} B::B(int i) { x=i; y=0; cout<<\} B::B(int i,int j) { Set b; for(int i=1;i<=8;i++) b.Add(i); b.print(); cout< for(int j=11;j<20;j++) b.Add(j); Set c(b); c.print(); } x=i; y=j; cout<<\ } B::~B() { cout<<\ endl\} void B::print() { cout<<\} void main() { B *ptr; ptr=new B[3]; ptr[0]=B(); ptr[1]=B(5); ptr[2]=B(2,3); for(int i=0;i<3;i++) ptr[i].print(); delete[] ptr; } 18 答:程序输出 Default constructor called. Destructor called Default constructor called. x=0,y=0 Default constructor called. x=5,y=0 Default constructor called. x=2,y=3 Destructor called Destructor called Constructor1 called Destructor called Destructor called Destructor called Constructor2 called (6) #include 7.3 定义一个学生类student,它含有私有数据成员:学号、姓名、年龄,及公有成员函数:setvalue()(用于设置三个私有数据成员的值)、print()(用于输出三个数据成员的值)及构造函数,在主函数中定义student类的两个对象stu1和stu2,对student类进行测试。 strcpy(StudentNum,pn); 参考程序:#include #include 19 } 7.4输入5个学生4门课成绩,然后求出:A. 每个学生的4门课总分; B. 每门课程的平均分; C. 输出总分最高的学生的姓名和总分 (提示:定义student类,有存放姓名和4门课成绩及总分的6个私有数据成员,定义用于student对象初始化的构造函数,公有成员函数sumscores()(求每个学生4门课总分),print()(用于输出学生姓名和总分)。求每门课程的平均分、判断并输出总分最高的学生的姓名和总分可以定义为类student的友元函数。) 参考程序:#include ]=0;g[2]=0;g[3]=0;sum=0;} Student(char *pn,int *ps,int n); void print() { cout< for(int i=0;i<4;i++) cout< cout< } friend void Calculateavg(Student *p,int n); //该友元函数用于计算每门课程的平均分 friend void Contrast(Student *p,int n); //用于判断并输出总分最高的学生姓名和总分 }; Student::Student(char *pn, int *ps, int n) { strcpy(name,pn); sum=0; for(int i=0;i { g[i]=ps[i]; sum=sum+g[i]; } } void Calculateavg(Student *p,int n) { int avg[4]={0,0,0,0}; // 这一维数组用于存放每门课程的平均分 for(int i=0;i<4;i++) { for(int j=0;j for(i=0;i<4;i++) cout<<\average of course\is \} void Contrast(Student *p, int n) { int k=0; int max; max=p[0].sum; for(int i=1;i