• 《C++专项练习》 — (2)


    C++基础专项练习二,,,水平依然不到家!

    错题分析与总结

    1 . 有如下模板定义:

    template <class T>
    T fun(T x,T y){
        return x*x+y*y;
    }
    

    在下列对fun的调用中,错误的是()
    A. fun(1, 2)
    B. fun(1.0, 2)
    C. fun(2.0, 1.0)
    D. fun< float >(1, 2.0)

    分析:这是一道C++模板的题目,模板函数的调用,这里主要是要求函数参数返回值的类型一致;
    对于选项A,参数都是int类型,符合要求;选项B,参数为浮点型与整型,类型不一致,错误;选项C,参数都是浮点型,类型一致;选项D,通过强制类型转换,将参数都转换为浮点型,类型一致;
    答案:B
    总结:错选D,对模板函数的调用了解不透彻;

    2 . c++中,声明const int i,是在哪个阶段做到 i只可读的?
    A. 编译
    B. 链接
    C. 运行
    D. 以上都不对

    分析:const用来说明所定义的变量是只读的。 这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。
    答案:A
    总结:错选C

    3 .类成员函数的重载、覆盖和隐藏区别描述正确的有?
    A .覆盖是指在同一个类中名字相同,参数不同
    B .重载是指派生类函数覆盖基类函数,函数相同,参数相同,基类函数必须有virtual关键字
    C .派生类函数与基类函数相同,但是参数不同,会”隐藏”父类函数
    D .函数名字相同,参数相同,基类无virtual关键字的派生类的函数会”隐藏”父类函数

    分析:关于类成员函数的重载、覆盖和隐藏概念非常相似,下面总结如下:
    a.成员函数被重载的特征:
    (1)相同的范围(在同一个类中);
    (2)函数名字相同;
    (3)参数不同;
    (4)virtual 关键字可有可无。
    b.覆盖是指派生类函数覆盖基类函数,特征是:
    (1)不同的范围(分别位于派生类与基类);
    (2)函数名字相同;
    (3)参数相同;
    (4)基类函数必须有virtual 关键字。
    c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
    (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
    (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
    答案: CD 此题是多项选择

    4 .下面这个程序执行后会有什么错误或者效果:

    #define MAX 255
    int main()
    {
         unsigned char A[MAX], i;
         for (i = 0; i <= MAX; i++)
             A[i] = i;
    }
    

    A. 数组越界
    B. 死循环
    C. 栈溢出
    D. 内存泄露

    分析: 死循环加数组越界访问(C/C++不进行数组越界检查 MAX=255;
    (1)数组A的下标范围为:0….MAX-1;
    (2)当i循环到255时,循环内执行: A[255]=255;这句本身没有问题,但是返回for (i=0;i<=MAX;i++)语句时,由于unsigned char的取值范围在(0..255),i++以后i又为0了,这样就会无限循环下去,造成了死循环;
    答案: AB

    5 .关于static用途说法正确的是?
    A .声明静态外部类
    B .声明静态外部全局变量
    C .声明静态外部函数
    D .声明静态局部变量

    分析:类型声明符在C语言里面主要有三个用途:
    1:设置静态局部变量,变量只定义一次,不能被别的函数使用
    2:设置静态全局变量,变量不能被外部文件所使用
    3:在类中设置静态函数,只能访问静态变量
    答案:BCD

    6 .请找出下面代码中的所有错误。说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”?

    1 #include "string.h"
    2 int main() 
    3 {
    4    char *src = "hello,world";
    5    char *dest = NULL;
    6    int len = strlen(src);
    7    dest = (char *)malloc(len);
    8    char *d = dest;
    9    char *s = src[len];
    10   while (len-- != 0)
    11      d++ = s--;
    12   printf("%s", dest);
    13   return 0;
    14 }

    A .第7行要为’’分配一个空间
    B .第9行改成char * s = &src[len-1]
    C .第12行前要加上*d = 0;
    D .第13行前要加上free(dest)释放空间

    分析:

    int main() 
    {
        char *src = "hello,world";
        int len = strlen(src);
        char *dest = (char *)malloc(len + 1); //要为分配一个空间
        char *d = dest;
        char *s = &src[len - 1]; //指向最后一个字符
        while ( len-- != 0 )
            *d++ = *s--;
        *d = 0; //尾部要加
        printf("%s
    ", dest);
        free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
        return 0; 
    }
    

    答案:ABCD

    精题收藏

    1 . 下列一段C++代码的输出是?

    #include "stdio.h"
    class Base
     {
     public:
         int Bar(char x)
         {
             return (int)(x);
         }
         virtual int Bar(int x)
         {
             return (2 * x);
         }
     };
     class Derived : public Base
     {
     public:
         int Bar(char x)
         {
             return (int)(-x);
         }
         int Bar(int x)
         {
             return (x / 2);
         }
     };
     int main(void)
     {
         Derived Obj;
         Base *pObj = &Obj;
         printf("%d,", pObj->Bar((char)(100)));
         printf("%d,", pObj->Bar(100));
     }
    

    A .100,-100
    B .100,50
    C .200,-100
    D .200,50
    分析:
    Derived Obj;
    Base *pObj = &Obj;
    printf(“%d,”, pObj->Bar((char)(100)))
    printf(“%d,”, pObj->Bar(100));
    第一个Bar(char)是非虚函数,因此是静态绑定,静态绑定是指指针指向声明时的对象,pObj声明时为Base类,因此调用的是Base类的Bar(char)
    第二个Bar(char)是虚函数,因此是动态绑定,动态绑定是指指针指向引用的对象,pObj引用Derived对象,因此调用的是Derived类的Bar(int)

  • 相关阅读:
    java jmap,jstat等工具的使用
    jvm 参数配置
    python NameError: name 'false' is not defined
    aiflow Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql
    TX 笔试题总结
    POJ 3140 Contestants Division
    POJ 1018 Communication System
    POJ 3260 The Fewest Coin
    Leetcode: Median of two sorted Array
    基础知识 (二)
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214940.html
Copyright © 2020-2023  润新知