新浪首页 > 新浪教育 > 自学考试 > 正文

2004年自考面向对象程序设计模拟试题(四)

http://www.sina.com.cn 2004/10/21 14:25  华夏大地教育网

  


  四,完成程序题(本大题共5小题,每小题4分,共20分)

    根据题目要求,完成程序填空。

  26.仔细阅读下列求两个点之间距离的程序,根据程序的输出结果在划线处填入正确语句。

    #include

    #include

    class point {

    float x,y;

    public:

    point(float a,float b) { x=a; y=b; }

    float distance(point &p) {

    float dx=_____①______;

    float dy=_____②______;

    return (float)srrt(da*da+dy*dy);

    }

    };

    void main()

    { point p1(2,3),p2(32,43);

    cout<<_____③_____<

    }

    输出结果:50

       答:① p.x-x

    ② p.y-y

    ③ distance(p2)

  [解析]由于求两点之间距离的函数“distance”为成员函数,所以由该函数的this指针所指对象可用作起点(参数之一),另一个用作终点的参数,必须在函数的参数表中显式地给出。dx 和dy分别计算两个结点间x和y坐标间的距离,因此应该为:dx=p.x – x 和 dy =p.y – y。对它们求平方相加后开方即可,得到两点间的距离:(float)srrt(da*da+dy*dy)。在主程序中求p1和p2两个结点之间的距离,由于由p1调用距离函数,所以由p2作为它的参数,即distance(p2)。

  27.完成如下的程序,使得输出为:

    base::10

    base::12

    derived::24

    #include

    class base {

    int x;

    public:

    base(int a) { x=a; }

    _________①__________;

    };

    class derived:public base {

    int y;

    public:

    derived(int a,int b):base(a) { y=b; }

    _________②_________;

    };

    void main()

    { base b(10),*p;

    derived d(12,24);

    b.print();

    p=&d;

    p->print();

    }

       答:① virtual void print() { cout<<”base::”<

    ② viod print() { base::print(); cout<<”derived::”<

  [解析]从主程序可见,“b.print();”是由基类的对象调用它的成员函数,要输出的是“base::10”,意味着基类中必须定义一个成员函数“print()”,该函数手它必须有输出语句“cout<<”base::”<print();”可知,派生类对象的地址初始化基类指针p,而由该指针来调用函数“print()”,意味着它调用的是派生类的函数。由输出“”base::12”和“derived::24”可知,派生类除了要输出自己的信息外,还要输出基类的信息,即“base::print(); cout<<”derived::”<

  28.下面是一个菜单程序,请在空格处填上正确的语句,使之能正常地工作。

    #include

    class Menu {

    public: virtual void fun()=0;

    };

    class Menu1:public Menu {

    public: void fun() { cout<<”do something for Menu1 !\n”; }

    };

    class Menu2:public Menu {

    public: void fun() { cout<<”do something for Menu2 !\n”; }

    };

    class Menu3:public Menu {

    public: void fun() { cout<<”do something for Menu3 !\n”; }

    };

    void main()

    { Menu *pm[3];

    pm[0]= new Menu1;

    pm[1]=new Menu2;

    pm[2]=new Menu3;

    int num;

    do {

    cout<<”1—Menu1 \n”;

    cout<<”2—Menu2 \n”;

    cout<<”3—Menu3 \n”;

    cout<<”enter your choose !\n”;

    cin>>num;

    if(______①______)

    _______②_______fun();

    } while(_____③_____);

    }

       答:① num>=1&&num<=3

    ② pm[num-1].

    ③ num!=0

  [解析]这个程序要完成的是菜单功能。在基类中定义了一个纯虚函数“fun()”,在下面的三个派生类中,各自分别对函数“fun()”进行了重新定义,以便完成各自的功能。因为只有三个菜单项,所以只在num取值范围在1和3之间时,才能执行所需功能,故在①处填入“num>=1&&num<=3”。当num取值范围在1和3之间时,分别执行菜单Menu1~Menu3的功能,也即执行派生类中相应函数“fun()”,为此要由指向各个派生类对象的基类指针来完成。由主程序可见,基类指针数组的各元素分别被赋给了各派生类的对象地址,考虑到C++数组的下标从0开始,②处填入“pm[num-1].”是正确的。为了使菜单循环工作,只有当输入0时才退出循环,③处应填入“num!=0”。

  29.两个复数只有当它们的实部和虚部分别相等时,才被认为它们相等。在空格处填入合适的内容,以完成下面的程序,使其重载运算符“==”,用以比较两个复数的相等。请在主函数中输出比较的结果。

    #include

    class complex {

    double real,imag;

    public:

    complex(double r,double i) { real=r; imag=i; }

    bool operator==(complex &);

    };

    int complex:: operator==(complex &com)

    { return(_____①_____) }

    void main()

    { complex c1(12.3,32.5),c2(21.7,18.6);

    if(______②______)

    return cout<<”true\n”;

    else

    return cout<<”false\n”;

    }

       答:① (real==com.real)&&(imag==com.imag)

    ② c1==c2或c1.operator==(c2)

  [解析]若两个复数的相等,则必有它们的实数部分和虚数部分都相等,所以运算符重载函数中返回“(real==com.real)&&(imag==com.imag)”,只有real==com.real与imag==com.imag都为真时,该函数的返回值才为真。在主程序中,为了比较两个复数c1和c2,可以隐式地写成“c1==c2”,也可显式写成“c1.operator==(c2)”。

  30.下列程序中声明了两个类AA和BB,其中函数“print”是类AA的成员函数,但是类BB的友元函数。请在①、②和③处各填入正确的内容,使程序能正常运行。

    #include

    _____①______;

    class AA {

    int t;

    public:

    AA(int x) { t=x; }

    void print(BB &b);

    };

    class BB {

    int s;

    public:

    BB(int y) { s=y; }

    friend void ___②___print(BB &);

    };

    void ____③_____

    { cout<<”AA:”<

    void main()

    { AA m(6);

    BB n(8);

    m.print(n);

    }

    输出结果为:AA:6;BB:8

       答:① class BB;

    ② AA::

    ③ AA::print(BB &w)

  [解析]由于AA类的成员函数“print”是类BB的友元函数,因此它必须有一个BB类的引用作为参数,以便有引用BB类数据成员的接口。但此时BB类还未定义,为解决此矛盾,在①处先对BB类作引用性声明“class BB;”,告诉系统BB类在后面定义。因为函数“print”是类AA的成员函数,在类外定义必须加上类名和作用域分辨符,即在②处加上“AA::”。在BB类外定义“print”时,因是友元,所以没有加上“BB::”的必要,但“AA::”还是必须加的,所以在③处填“AA::print(BB &w)”。


  特别说明:由于各方面情况的不断调整与变化,新浪网所提供的所有考试信息仅供参考,敬请考生以权威部门公布的正式信息为准。


评论】 【推荐】 【 】 【打印】 【下载点点通】 【关闭


    



新 闻 查 询
关键词一
关键词二
服饰 首饰 手机
电器 MP3 数码相机
热 点 专 题
中超俱乐部酝酿大变革
阿里汉下课几成定局
北京新交法听证报告
考研大讲堂 报考指南
2004中华小姐环球大赛
京城劣质楼盘备忘录
调查:南方周末创富榜
安妮宝贝笔记连载
全国万家餐馆网友热评

 
 ⊙ 分类信息 投资赚钱的秘密武器!糖尿病你往哪里逃! 权威医院治愈高血压!
·高血压人要“解放”! ·治疗皮肤癣最新成果 ·治股骨头坏死新突破 ·如果你有胃肠道疾病?
·今年哪些项目最赚钱? ·几千元创业的好项目 ·好生意,一月收回投资! ·疤痕疙瘩、痤疮一扫光
·香港女鞋女包火爆招商 ·小项目玩赚大市场 ·幼教新模式火爆全球 ·权威治皮肤顽疾白斑症
·男人酷女人爱赚男人钱 ·投资几千元快活做老板 ·攻克皮肤癣,靓丽肌肤 ·280-1680元治愈糖尿病
 



文化教育意见反馈留言板电话:010-62630930-5178 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 招聘信息 | 网站律师 | SINA English | 产品答疑

Copyright © 1996 - 2004 SINA Inc. All Rights Reserved

版权所有 新浪网
北京市通信公司提供网络带宽