牛客刷题:20191109

  1. ASCII 码------使用指定的7位或者8位二进制数组和来表示128或者256种可能的字符。BCD(binary coded decimal)亦称为二—十进制代码或二进码十进制数。例如,用4位二进制数俩表示一位十进制数的0-9这十个数码,是一种二进制的数字编码形式。内码是汉字系统中使用的二进制字符编码。十进制面向的是开发人员,通过相应的转化给计算机使用。

2.多态—在基类的函数前面加上virtual关键字,通过在派生中重写该函数,运行的时候就会根据对象类型来判断调用相应的函数。对象时派生类就调用派生类的相应函数,对象是基类就调用基类的相应函数。多态有静态多态(编译时)和动态多态(运行时),静态多态主要是函数重载和运算符重载,动态多态就是虚函数。

3.有以下程序:求程序的输出。
#include <stdio. h>
int fun( int a )
{
int b = 0;
static int c = 3;
a = ( c + +,b + + );
return ( a );
}
main( )
{
int a = 2,i,k;
for( i = 0;i<2;i + + )
k = fun( a + + );
printf("%d\n",k );
}
答案:0
解析:fun函数返回的a值和传入的a值无关,每次循环得到的k值和上一次循环也无关,所以直接看最后一次循环结果就好,不过要注意c值和fun()函数的调用次数是有关的。结果的关键在于逗号表达式 a=(c++,b++)。本题考查在于:第一:逗号表达式,a =(表达式1,表达式2) ,则a = 表达式2,同理如果后面有n个表达式的话,返回的是最后一个表达式的值。因此这里a = b++;第二:++运算符,这里 a = b++ 由于++在后面,表示先赋值,再执行++,因此每次都是a = 0,再执行 b=1,因此答案是0。

  1. 代码运行正确吗?原因?
    template class Foo{
    T tVar;
    public:
    Foo(T t) : tVar(t) { }
    };

template class FooDerived:public Foo
{
};

int main()
{
FooDerived d(5);
return 0;
}
答案:不正确
解析:当基类构造函数需要外部传递参数才能进行初始化时,派生类必须显式定义构造函数,为基类传递参数,基类如果不需要传递参数,派生类可以不定义构造函数。

5.在这里插入图片描述
答案:22 4 4 4
解析:数组长度即为定义的数组方括号中数字的大小。
字符串长度即为字符个数
字符串所占的空间大小即为字符串长度加1.
作为函数参数传递的数组退化为指针。
这里(1)中,字符串所占的空间即为字符串长度21加1 为22,(2)中,p为指针,因此大小为4 (3)中,str作为函数参数传递,数组退化为指针,因此为4。(4)p为开辟内存的地址,因此大小为4

6.在这里插入图片描述
答案: B
解析:(1)在类的成员函数中可以调用delete this ;
(2)delete this 以后,关于该对象,还可以调用其他的方法(但是不能涉及数据成员和虚函数)。当一个类对象声明 的时候,系统会自动为其分配内存空间。在类对象的内存空间中,只有数据成员和虚函数表指针,并不包含代码内容,类的成员函数放在单独的代码段。调用成员函数时,隐含传递一个this 指针,使的成员函数知道哪个对象在调用。在调用delete this的时候,类对象的内存控件被释放。在delete this 以后的任何函数调用,只要不涉及this 指针,都能进行调用。(delete this 释放了类对象的内存空间,但是内存空间并不是马上被收回,可能是缓冲或者其他原因,这段内存并没有被马上收回)一旦涉及this 指针,比如操作数据成员,调用虚函数,都会出错。
(3)delete 的本质是“为将要被收回空间的内存调用析构函数,然后释放内存”,这里就不能把delete this 放在析构函数当中,否则,delete this 调用对象的析构函数,析构函数中又调用delete this 这样反复递归调用,堆栈溢出,程序崩溃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值