每天进步一点点,我们就能遇见更好的自己,开启第二题刷题日记,一起来打卡加油!
我们都会在各自喜欢的事情里,变得可爱!
提示:以下是本篇文章正文内容,下面案例可供参考
一、选择题
1、下面程序段包含4个函数,其中具有隐含this指针的是()
int f1();
classT{
public:static int f2();
private:friend int f3();
protect:intf4();
;
A、f1
B、f3
C、f2
D、f4
答案:D。分析:
1、静态变量没有this指针
2、友元函数没有this指针
3、类外面的变量没有this指针
4、类里面的普通成员函数有指针
所以,f1, f2, f3都没有this指针。
2、C++中关于堆和栈的说法,哪个是错误的()
A、堆的大小仅受操作系统的限制,栈的大小一般较小
B、堆和栈都可以静态分配
C、在堆上频繁的调用new/aelete容易产生内存碎片,栈没有这个问题
D、堆和栈都可以动态分配
答案:B。分析:
栈和堆都能动态分配地址,但是堆没有静态的堆
3、关于虚函数的描述正确的是()
A、派生类必须重新定义基类的虚函数
B、派生类的虚函数与基类的虚函数具有不同的参数个数和类型
C、内联函数不能是虚函数
D、虚函数可以是一个static型的函数
答案:A。分析:派生类必须重新定义基类的虚函数,完成重写才能调用。虚函数不可以是一个static函数。
4、C++将父类的析构函数定义为虚函数,下列正确的是哪个()
A、这样做是错误的
B、释放父类指针时能正确释放子类对象
C、释放子类指针时能正确释放父类对象
D、以上全错
答案:D。分析:在释放父类指针时,如果父类指针指向了一个子类对象,那么可以调用子类的析构继而调用父类的析构,删除这个对象,防止内存泄漏问题。
5、当一个类对象的生命周期结束后,关于调用析构函数的描述正确的是:()
A.如果派生类没有定义析构函数,则只调用基类的析构函数
B.如果基类没有定义析构函数,则只调用派生类的析构函数
C.先调用派生类的析构函数,后调用基类的析构函数
D.先调用基类的析构函数,后调用派生类的析构函数
答案:C。分析:析构过程和构造相反,先调用派生类的析构函数,后调用基类的析构函数。
二、牛客编程题
解题思路:暴力破解:写一个函数判断是不是质数
代码示例:
usingnamespacestd; boolisPrime(intn) { if (n<=3) { returnn>1; } for (inti=2; i<n; i++) { if (n%i==0) { returnfalse; } } returntrue; } intmain() { intn; cin>>n; if (n<=2&&n%2!=0) return0; inta=n/2, b=n/2; while (a<n&&b>0) { if (isPrime(a) &&isPrime(b)) { break; } a++; b--; } cout<<b<<endl<<a; return0; }
2、二进制插入
思路
i j
1024:100000000 00
19 : 10011
可以看到上面得出,只要我们用1011与1024的第j位到第i位做或运算(|)即可。
我们想到可以让10011左移j位就可以正常做运算了。
10000000000
00001001100
-------------------
10001001100 ---->1100(十进制)
代码示例:
classBinInsert { public: intbinInsert(intn, intm, intj, inti) { m<<=j; returnn|m; } };
总结
本文为大家讲解了5道C++高频选择题,2道牛客编程题。希望大家读后能够有所收获。