《C++语言与面向对象的设计》习题及参考解答(4)

2020-06-05 09:12

(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 public: class B{ A(){ } private: A(int i,int j):c(i,j) { } int a,b; void printa(){ c.printb( ); } public: }; B() { } void main() B(int i,int j){a = i ;b = j;} { void printb(){ cout<

16

答案:程序输出为7,8 (2)

#include class Count{ static int count ; public: Count( ) {count++ ;} static int Getc( ) { return count ;} ~Count( ) {count--;} 答案:输出为 104

(3)

#include class Rect{

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 const int N=100; class Set {

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;i0) cout<

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 class B{ int x,y; public: B(); B(int i); B(int i,int j); ~B();

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 { class A A x(8); { int A::*pc; int a; pc=&A::c; public: x.*pc=3; A(int i){a=i;} int (A::*pfun)(int); int fun(int b){return a*c+b;} pfun=A::fun; int c; A*p=&x; }; cout<<(p->*pfun)(5)<

7.3 定义一个学生类student,它含有私有数据成员:学号、姓名、年龄,及公有成员函数:setvalue()(用于设置三个私有数据成员的值)、print()(用于输出三个数据成员的值)及构造函数,在主函数中定义student类的两个对象stu1和stu2,对student类进行测试。

strcpy(StudentNum,pn); 参考程序:#include

#include strcpy(Name,pname); class Student age=n; { } private: void print() char StudentNum[8]; { char Name[10]; int age; cout<<\public: cout<<\ Student(); cout<<\ Student(char *pn,char *pname=\ } n=0) }; { void main() SetValue(pn,pname,n); { } Student stu1(\ void SetValue(char *pn,char Student stu2(\*pname=\ stu1.print(); { stu2.print();

19

}

7.4输入5个学生4门课成绩,然后求出:A. 每个学生的4门课总分; B. 每门课程的平均分;

C. 输出总分最高的学生的姓名和总分

(提示:定义student类,有存放姓名和4门课成绩及总分的6个私有数据成员,定义用于student对象初始化的构造函数,公有成员函数sumscores()(求每个学生4门课总分),print()(用于输出学生姓名和总分)。求每门课程的平均分、判断并输出总分最高的学生的姓名和总分可以定义为类student的友元函数。)

参考程序:#include #include class Student { private: char name[10]; int g[4],sum; //分别存放一个学生4门课成绩和总分 public: Student(){strcpy(name,\

]=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


《C++语言与面向对象的设计》习题及参考解答(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:回复买家好评模板

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: