C++程序设计,课程代码4737,课后习题8答案

2018年3月13日19:58:42 5 1,264 views

习题8

一、单项选择题

  1. 要是一个类成为抽象类,这个类应具有的条件是( )。
    A. 至少有一个纯虚函数  B. 至少有一个虚函数  C. 只含有一个纯虚函数  D. 只含有一个虚函数
  2. 下面是基类中的成员函数形式,其中为纯虚函数的是( )。
    A. virtual void f(void);  B. virtual void f(void) = 0;  C. void f(void) = 0;  D. virtual void f(void) {}

二、分析程序题

  1. 分析下面程序的输出结果。
#include <iostream>
using namespace std;
class base {
        int x;
    public:
        base(int a) { x = a; cout << "base..." << x << endl; }
        base(base &t) { x = t; cout << "base copy..." << x << endl; }
        virtual ~base() { cout << "~derived..." << y << endl; }
};
class derived : public base {
        int y;
    public:
        derived(int a, int b) : base(a)
        { y = b; cout << "derived..." << y << endl; }
        derived(derived &t) : base(t) 
        { y = t.y; cout << "derived..." << y << endl; }
        ~derived() { cout << "derived..." << y << endl; }
};
void main() {
    base *pb = new derived(52, 44);
    base a(*pb);
    delete pb;
}
  1. 分析下面程序的输出结果。
#include <iostream>
using namespace std;
class A {
    publicvirtual void fa(void) { cout << "A::fa" << endl; }
        void fb(void) { cout << "A::fb" << endl; }
};
class B :public A {
    public:
        void fa(void) { cout << "B::fa" << endl; }
        void fb(void) { cout << "B::fb" << endl; }
}
void main() {
    A *pa = new A;
    A *pb = new B:
    pa->fa();
    pb->fb();
    pb->fa();
    pb->A::fa();
    ((B*)pb)->fb();
}

三、查错题

找出下面程序中的错误,使其输出结果如下:
58
18, 18
源程序如下:

#include <iostream.h>
class base
{
        int m;
    public:
        base(int a) { m = a;}
        int Getm() { return m; }
        virtual void show() { cout << Getm() << endl; }
};
class derived : public base
{
        int n;
    public:
        derived(int a, int b) : base(a) { n = b;};
        virtual void show() { cout << Getm() << "," << n << endl; }
};
void print(base p)
{ p.show(); }
void main() {
    base A(58);
    derived B(18, 28);
    print(A);
    print(B);
}

四、完成程序题

仔细阅读下面的程序,根据输出结果分别给出基类base和派生类derived类中没有定义的内联函数void display(void)const

#include <iostream.h>
class base
{
    int i;
    int j;  
public:
    base(int I, int J) : i(I), j(J) { display(); }
    int getI(void) { return i; }
    int getJ(void) { return j; }
};
class derived : public base
{
    int k;
public:
    derived(int I, int J, int K) : base(I, J), k(K) { display(); }
    //定义display
};
void main(void)
{
    base b3(8, 9);
    derived d1(10, 20, 5);
}

程序输出:
i=8 i=9
i=10 i=20
i=10 i=20 k=5
i+k=15 j+k=25

历史上的今天:


欢迎来到菜鸟头头的个人博客
本文章百度已收录,若发现本站有任何侵犯您利益的内容,请及时邮件或留言联系,我会第一时间删除所有相关内容。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:5   其中:访客  3   博主  2

    • avatar 酷醉醉 1

      博主你好 选择题怎么没有答案了?

        • avatar 头头 Admin

          @酷醉醉 这后面的没做了

            • avatar 酷醉醉 1

              @头头 那前面做的都是正确的吗?

                • avatar 头头 Admin

                  @酷醉醉 这不一定,但基本都是正确的

                    • avatar 酷醉醉 1

                      @头头 好的 感谢