牛客网刷题笔记(二)
①
函数定义不能嵌套,指的是不能在函数定义内部进行另一个函数的定义。因为函数彼此地位是平行的。
② 创建对象时,对象的内存和指向对象的指针分别分配在() A.堆区,栈区 B.常量区,堆区 C.全局区,栈区 D.栈区,堆区
解析
栈区是由编辑器自动分配释放,用来存放对象的物理地址,而堆区用来存放方法和变量,并将产生的地址传给栈区。
③ 若有以下类T说明,则函数fFriend的错误定义是( )。
class T { int i; friend void fFriend( T&, int ); };
A. void fFriend( T &objT, int k ) { objT.i = k; } B. void fFriend( T &objT, int k ) { k = objT.i; } C. void T::fFriend( T &objT, int k ) { k += objT.i; } D. void fFriend( T &objT, int k ) { objT.i += k; }
解析
友元函数:
④如果downcast是安全的(也就是,如果基类指针或者引用确实指向一个派生类对象)这个运算符会传回适当转型过的指针。如果downcast不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)。这个是指C++里的()
A.dynamic_cast B.reinterpret_cast C.static_cast D.const_cast
解析——暂时不太懂
dynamic_cast将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理, 即会作一定的判断。 对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针; 对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。
reinterpret_cast这个转换是最“不安全”的,两个没有任何关系的类指针之间转换都可以用这个转换实现。
static_cast静态转换是最接近于C风格转换,很多时候都需要程序员自身去判断转换是否安全。 const_cast这个转换好理解,可以将常量转成非常量。
⑤int *p[4] 与选择项中的 说明 () 等价 正确答案: C A.int p[4] B.int *p C.int *(p[4]) D.int (*p)[4]
解析
考察运算符优先级——[ ] 优先级高于 * 所以p先表示数组,数组的元素是指针,指针指向int型数据
⑥
#include<bits/stdc++.h> using namespace std; int main(){ int n = 5; vector<int>a; set<int>b; for(int i = 1; i <= n; ++i){ a.push_back(i); b.insert(i);} for(int i = 1; i <= n; ++i){ a.push_back(i); b.insert(i);} cout<<a.size()<<b.size()<<endl; return 0;}
程序的输出为( )
解析
考察容器,vector是
⑦以下程序段的输出结果是( )。 答案:1234
int a=1234;
printf("%2d ",a);
解析
%d前面的数字表示打印格式的位数。 1.如果输出的内容位数不足将会在左边补足空格 2.如果输出的内容位数超过%d前面的数字会将内容全部输出,%d前面的数字相当于无效
⑧类A是类B的友元,类C是类A的公有派生类,忽略特殊情况则下列说法正确的是( )
A.类B是类A的友元 B.类C不是类B的友元 C.类C是类B的友元 D.类B不是类A的友元
解析
BD 友元关系是单向的,不是对称,不能传递。 关于传递性,有人比喻:父亲的朋友不一定是儿子的朋友。 那关于对称性,是不是:他把她当朋友,她却不把他当朋友?✧(≖ ◡ ≖✿)
⑨print函数声明为void print(int a,char b=‘b’,int c=1); 下面函数调用正确的是( )
A.print(‘a’); B.print(5,8); C.print(5,’#’); D.print(5,’#’,2);
⑩CSingleLock