《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(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行要为’\0’分配一个空间

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); //要为\0分配一个空间
    char *d = dest;
    char *s = &src[len - 1]; //指向最后一个字符
    while ( len-- != 0 )
        *d++ = *s--;
    *d = 0; //尾部要加\0
    printf("%s\n", 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)

时间: 2024-12-19 16:05:27

《C++专项练习》 — (2)的相关文章

《大话操作系统——做坚实的工程实践派》(2)

 <大话操作系统--做坚实的工程实践派>(2)

《大话操作系统——做坚实的工程实践派》(硬件篇)

 很多朋友需要PDF,经过这几天的辛苦校对,当然目前只校对了一部分,那就先发这一部分的PDF PDF:<大话操作系统--做坚实的工程实践派>(硬件篇)下面是一部分PDF的截图,可以先预览一下

《大话操作系统——做坚实的工程实践派》(5)

有人说我不是只会玩X86吗?我现在铁板钉钉的申明:我其实兼通:ARM.IA-32.IA-32e.AMD64, ?了解MIPS,但没做过MIPS因为确实没有相应的MIPS硬件平台. ?

《大话操作系统——做坚实的工程实践派》(9)

20年前,对操作系统来说,虚拟内存是个高大上的玩意,它不仅仅是具备内存保护的功能,也给应用程序的独立开发带来了方便 ,其实它的底层逻辑是一个叫MMU的东西完成了一些重要的工作--

《大话操作系统——做坚实的工程实践派》(4)

 操作系统内核必须要关注一个具体硬件平台的设备

《大话操作系统——做坚实的工程实践派》(6)

 继续写硬件体系,这个不写完,不会写操作系统内核,因为根基不正,则难于达到上层境界.

《大话操作系统——做坚实的工程实践派》(1)

1《大话操作系统——做坚实的工程实践派》(8.1)(指令集未完待续)

大多数情况,操作系统内核用纯C语言是写不了的,因为有些关键功能,重要代码段,还是得用汇编指令干上一把才行, 本书不会过于详细的介绍ARM920T处理器所有的指令以及每条指令所有的详细使用方式.因为,一.篇幅所限,二.本书不是介绍某一特定处理器的指令集的专著.但是也不用害怕,笔者会尽量做到写操作系统内核时足够使用.

《大话操作系统——做坚实的工程实践派》(7)

 写操作系统内核需要了解一个具体计算平台的CPU,包括这个CPU里的寄存器和异常中断处理机制

《大话操作系统——做坚实的project实践派》(2)

?? ?<大话操作系统--做坚实的project实践派>(2)? 原文地址:https://www.cnblogs.com/llguanli/p/8451832.html