C++期末复习卷(含答案)

目录

复习卷A题目

一、选择最合适的一项填空(10分,每空1分)

二、程序阅读题(30分)

1. 写出下面程序的输出结果。(10分)

2. 写出下面程序的输出结果。(10分)

3. 写出下面程序的输出结果。(10分)

三、程序设计问答题(60分)

1.在文件Array.h中声明了Array类,它管理一个int型动态数组,其部分声明如下:(30分)

2.在文件person.h中声明了CPerson类和CAddressed类,前者用来管理一个人的名字,后者从前者派生并增加管理该人住址,其部分声明如下:

复习卷A答案

一、选择

二、程序阅读题(30分)

三、程序设计问答


复习卷A题目

一、选择最合适的一项填空(10分,每空1分)

        1. 增加了一些新的运算符         2. 允许函数重载

        3. 规定函数说明必须用原型      4. 封装性

        5. 消息性                       6. 继承性

        7. 多态性                      8. 重用性

        9. 初始化数据成员              10. 初始化函数

        11.初始化常数据成员           12. 初始化静态成员

        13. 回收数据成员在堆上的空间   14. 回收数据成员占用的空间

        15. 回收数据成员在栈上的空间   16. 构造函数和析构函数

        17. 复制构造函数和赋值运算符   18. 复制构造函数和析构函数

        19. >                          20. ::    

        21. []                         22. <<    

        23. 是…一部分,或有一个       24.是一个

        25. 单向的且可继承             26. 单向的但不可继承

        27. 双向的且可继承             28. 双向的但不可继承

        29. 组合类                     30. 虚函数

        31. 常成员函数                 32. 纯虚函数

        C++对C语言作了很多改进,其中引进了类和对象的概念使语言发生了质变,从而使C++支持面向对象程序设计。在面向对象程序设计中,(  ①  )的含义是指将对象的属性和方法形成一个不可分割的整体,对象只保留有限的对外接口,并尽可能隐藏对象内部的具体细节。

        在封装一个类时,特别要注意构造函数和析构函数的设计,其中,构造函数的作用是(  ②  ),析构函数的作用是(  ③  )。另外,如果类中有使用了堆内存的指针成员,为正确实现深复制的功能,我们需要为该类实现(  ④  )。C++中的许多运算符都是可以重载的,不过有些仅可以重载为成员函数,例如(  ⑤  )运算符;有些仅能重载为友元函数,例如(  ⑥  )运算符;还有一个运算符不能被重载。

        类之间有组合关系、聚合关系、继承与派生关系,还有友元关系。其中组合关系意味着类之间有(  ⑦  )的关系,继承与派生关系意味着类之间有(  ⑧  )的关系,友元关系是(  ⑨  )。如果一个类有(  ⑩  ),则称该类为抽象类,从而该类不可实例化。

①________   ② _______  ③ _______  ④ _______ ⑤ _______

⑥ ________   ⑦ _______  ⑧ _______  ⑨ _______ ⑩ _______

二、程序阅读题(30分)

1. 写出下面程序的输出结果。(10分)

#include <iostream>

using namespace std;

class A

{public:

    A() : m_x(0) { cout << "A()" << endl; }

    A(double x) : m_x(x) { cout << "A(int)" << endl; }

    ~A() { cout << "~A()" << endl; }

private:

    double m_x;

};

class B

{public:

    B(const A & a) : m_a(a) { cout << "B()" << endl; }

    B(const B & r)

{ m_a = r.m_a; b = r.b; cout << "B(const B &)" << endl; }

    ~B() { cout << "~B()" << endl; }

private:

    A m_a;

    double b;

};

int main()

{   A a(1);

    A a2 = a;

    static B b(a);

    B b2(b);

    return 0;

}

2. 写出下面程序的输出结果。(10分)

#include<iostream>

using namespace std;

class A

{public:

    A() {  }

    ~A() { cout << "A::~A()" << endl; }

    A(const A &) { cout << "A::A(const A &)" << endl; }

    void func() { virfunc(); cout << "A::func()" << endl; }

    virtual void virfunc() { cout << "A::virfunc()" << endl; }

};

class B : public A

{public:

    B() { func(); }

    ~B() { cout << "B::~B()" << endl; }

    void func() { virfunc(); cout << "B::func()" << endl; }

    virtual void virfunc() { cout << "B::virfunc()" << endl; }

};

int main()

{   A * pA = new B;

    B * pB = dynamic_cast<B*>(pA);

    B b(*pB);

    pA->func();

    b.func();

    delete pA;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值