• 笔试强训48天——day17


    一. 单选

    1. 假设A为抽象类,下列声明()是正确的

    A int fun(A);
    B A Obj;
    C A fun(int);
    D A *p;

    正确答案:D

    抽象类不能实例化对象
    建立相对应类型的指针,并不是实例化对象

     

    2. 虚函数可不可以重载为内联?

    A 可以
    B 不可以
    C 语法错误

    正确答案:B

     

    3. 下面有关虚函数的描述,说法错误的是?

    A 虚函数的作用是实现了继承性
    B 虚函数的作用就是实现“动态联编”,也就是在程序的运行阶段动态地选择合适的成员函数
    C 和类的静态成员函数与非类的成员函数相比,虚函数的效率较低
    D 要正确的实现虚函数,只能用一个基类的指针或者引用来指向派生类对象
    正确答案:A

    继承主要的目的是实现多态——虚函数,反之是不成立的

     

    4.下面这个代码输出的是()

    #include 
    #include 
    using namespace std;
    int main(void)
    {
    vector<int>array;
    array.push_back(100);
    array.push_back(300);
    array.push_back(300);
    array.push_back(300);
    array.push_back(300);
    array.push_back(500);
    vector<int>::iterator itor;
    for(itor=array.begin();itor!=array.end();itor++)
    {
    if(*itor==300)
    {
    itor=array.erase(itor);
    }
    } f
    or(itor=array.begin();itor!=array.end();itor++)
    {
    cout<<*itor<<"";
    }
    return 0;
    } 
    
    • 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

    A 100 300 300 300 300 500
    B 100 300 300 300 500
    C 100 300 300 500
    D 100 300
    正确答案:C

    不会删除所有的300
    迭代器会接受删除之后的的位置,然后++就会跳过两个300

     

    5. 在 C++ 中,用于实现动态多态性的是( )。

    A 内联函数
    B 重载函数
    C 模板函数
    D 虚函数

    正确答案:D

     

    6. 调用一成员函数时, 使用动态联编的情况是()

    A 通过对象调用一虚函数
    B 通过指针或引用调用一虚函数
    C 通过对象调用静态函数
    D 通过指针或应用调用一静态函数

    正确答案:B

     

    7. 下面有关继承、多态、组合的描述,说法错误的是?

    A 封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对
    不可信的进行信息隐藏
    B 继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展
    C 隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了
    D 覆盖是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同

    正确答案:D

    《高质量C++编程》第七章 重载、隐藏、覆盖
    覆盖必须达到三同——虚函数重写

     

    8. “引用”与多态的关系?

    A 两者没有关系
    B 引用可以作为产生多态效果的手段
    C 一个基类的引用不可以指向它的派生类实例
    D 以上都不正确

    正确答案:B

    多态必须通过父类的指针或引用调用虚函数

     

    9. 下面这段程序的输出是什么?

    class A{
    public:
    A(){p();}
    virtual void p(){print("A")}
    virtual ~A(){p();}
    };
    class B:public A{
    public:
    B(){p();}
    void p(){print("B")}
    ~B(){p();}
    };
    int main(int, char**){
    A* a=new B();
    delete a;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    A AABB
    B BBAA
    C ABAB
    D ABBA
    正确答案:D

    先构造的后析构

     

    10. 以下代码的运行结果为()

    class Base {
    public:
    Base() {
    echo();
    } v
    irtual void echo() {
    printf("Base");
    }
    };
    class Derived:public Base {
    public:
    Derived() {
    echo();
    } v
    irtual void echo() {
    printf("Derived");
    }
    };
    int main() {
    Base* base = new Derived();
    base->echo();
    return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    A DerivedDerivedDerived
    B DerivedBaseDerived
    C BaseDerivedBase
    D BaseDerivedDerived
    正确答案:D

    new子类先构造父类,再构造子类: BaseDerived
    虚函数重写调子类:Derived

     

     

    二. 编程

    1.杨辉三角的变形

    链接

    以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。
    求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3,输入2则输出-1。

    输入描述:
    输入一个int整数
    输出描述:
    输出返回的int值

    示例1:
    输入
    4 输

    3

    根据规律:
    偶数在左半部分
    {-1,-1,2,3,2,4,2,3,2,4,…}

    正确答案:

    #include
    #include
    using namespace std;
    int main()
    {
        int n;
        while(cin>> n)
        {
            if(n<=2)
            cout<<-1<<endl;
            else if(n%4 == 1 || n%4 == 3)
            cout<<2<<endl;
            else if(n%4 == 2)
            cout<<4<<endl;
            else
            cout<<3<<endl;
        }
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    另一种写法:

    #include
    #include
    using namespace std;
    int main()
    {
        int n;
        int a[] = {4,2,3,2};
        while(cin>> n)
        {
            int ret = -1;
            if(n>2){
                ret = a[(n-2)%4];
            }
            cout<<ret<<endl;
    
            
        }
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

     

    2. 计算某字符出现次数

    链接

    写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)

    输入描述:
    第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字符。
    输出描述:
    输出输入字符串中含有该字符的个数。(不区分大小写字母)

    示例1:
    输入
    ABCabc
    A
    输出
    2

    正确答案:
    C语言

    #include 
    #include 
    int main()
    {
    char str[1003] = { 0 };
    //gets函数获取一行数据,因为会连带最后的换行一起获取,所以不用担心遗留的换行对后续输入造成影响
    gets(str);
    char find;
    scanf("%c", &find);//捕捉要查找的字符
    int count[128] = { 0 };//用于记录每个字符出现次数
    int len = strlen(str);//获取字符串实际长度
    for (int i = 0; i < len; i++) {
    count[str[i]] += 1; //对应字符的位置计数+1
    } int res = count[find];
    if (find >= 'A' && find <= 'Z') {//如果是A-Z需要将a-z对应的计数加上
    res += count[find + 32];
    } else if (find >= 'a' && find <= 'z') {//如果是a-z需要将A-Z对应的计数加上
    res += count[find - 32];
    } printf("%d\n", res);
    return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    适合初学者学习课程课题设计javaweb超级简单图书管理系统基于servlet基础开发
    KeeWiDB的高性能修炼之路:架构篇
    数字统计【NOIP2010普及组】
    ClientAbortException: java.io.IOException: Broken pipe 解决
    预训练词嵌入Pretrained Word Embeddings
    MMDetection 简单教程之配置文件(MMDetection3D也可从此开始学习)
    java-net-php-python-springboot班级信息系统计算机毕业设计程序
    制造业小企业内部小程序简单设计
    Azure AD Domain Service(二)为域服务中的机器配置 Azure File Share 磁盘共享
    开源 SD-Small 和 SD-Tiny 知识蒸馏代码与权重
  • 原文地址:https://blog.csdn.net/Ll_R_lL/article/details/127619255