笔试强训day12

一. 单选

1. 引用和指针,下面说法不正确的是()
A 引用和指针在声明后都有自己的内存空间
B 引用必须在声明时初始化,而指针不用
C 引用声明后,引用的对象不可改变,对象的值可以改变,非const指针可以随时改变指向的对象以及对象的值
D 空值NULL不能引用,而指针可以指向NULL
引用不是定义一个变量,而是给已存在的变量取别名(外号),共用同一块内存空间
使用引用尽量使用const
特点:
1)引用在定义时必须初始化
2)一个变量可以有多个引用
3)引用一旦引用一个实体,就不能引用别的实体
2. 下列哪一个是析构函数的特征()
A 析构函数定义只能在类体内
B 一个类中只能定义一个析构函数
C 析构函数名与类名不同
D 析构函数可以有一个或多个参数
 析构函数:
1)析构函数名是在类名前加上字符"~";
2)无参数无返回值类型
3)一个类只有一个析构函数,若未显示定义,系统会自动生成默认的析构函数
3. 若要对data类中重载的加法运算符成员函数进行声明,下列选项中正确的是?
A Data operator+(Data);
B Data operator(Data);
C operator+(Data,Data);
D Data+(Data);
格式: 返回值类型 operator运算符符号(参数列表)  {重载处理}
重载成类的成员函数时,类本身是一个操作数(有一个隐藏的this指针),如果需要另一个操作数由函数的参数提供
4. 若MyClass是一个类名,其有如下语句序列:
MyClass c1,*c2;
MyClass *c3=new MyClass;
MyClass &c4=c1;
上面的语句序列调用构造函数个数是( )。
A 1
B 2
C 3
D 4
 c1 创建了一个类对象,调用一次构造函数;
*c2,是一个指针,该指针将来存放地址,不调用构造函数;
*c3,new了一个对象在堆上,调用一次构造函数;
&c4,给c1取别名,并未调用构造函数
5. 下面关于类和对象的描述中,错误的是:
A 类就是C语言中的结构体类型,对象就是C语言中的结构体变量
B 类和对象之间的关系是抽象和具体的关系
C 对象是类的实例,一个对象必须属于一个已知的类
D 类是具有共同行为的若干对象的统一描述体
结构体中只能存放变量,而类中既能存放变量,又可以存放函数
类是用来描述对象的,描述对象有哪些属性和方法
对象是类的具体的体现
6. 下列关于类和对象的叙述中,错误的是()
A 一个类只能有一个对象
B 对象是类的具体实例
C 类是对某一类对象的抽象
D 类和对象的关系是一种数据类型与变量的关系
单例模式:一个类只能创建一个对象
7. 如果有一个类是 myClass , 关于下面代码正确描述的是:
myClass::~myClass(){
    delete this;
    this = NULL;
}
A 正确,我们避免了内存泄漏
B 它会导致栈溢出
C 无法编译通过
D 这是不正确的,它没有释放任何成员变量。
1.不能在析构函数中delete this;
~A()
{
    delete this:
}

此程序可以通过编译,但形成了无限递归,程序运行时会栈溢出而导致程序崩溃

2.析构函数的作用:对象在销毁时会自动调用析构函数,完成对象中资源的清理工作---问题:并不是所以对象都是从堆上new出来的

3.this=NULL;//编译失败---this类型:类类型* const this---this指针的指向不能被修改

8. 请问以下说法,哪个是正确的:
A 每个类都有一个无参数的构造函数。
B 每个类都有一个拷贝构造的函数。
C 每个类能有多个构造函数。
D 每个类能有多个析构函数。
A.对象实例化时编译器会自动调用对应的构造函数,若未显示定义,编译器才会自动生成一个无参构造函数
B.拷贝构造函数只有一个形参,且必须是类类型对象的引用,若未显示定义,编译器会生成默认的拷贝构造函数
D.一个类只能有一个析构函数
9. 下面程序段包含4个函数,其中具有隐含this指针的是()
int f1();
class T
{
public:static int f2();
private:friend int f3();
protect:int f4();
};
A f1
B f2
C f3
D f4
类中每个非静态成员函数中都有一个隐藏的this指针参数
f1 是全局变量 不是成员变量
f2 是静态成员函数
f3 是友元函数, 友元函数不是类的成员函数
10. C++中关于堆和栈的说法,哪个是错误的()
A 堆的大小仅受操作系统的限制,栈的大小一般较小
B 在堆上频繁的调用new/delete容易产生内存碎片,栈没有这个问题
C 堆和栈都可以静态分配
D 堆和栈都可以动态分配
堆上都是动态分配的,而栈上既可以动态分配也可以静态分配---比如在函数体内创建一个数组 

二. 编程

1. 完善核心代码 标题:二进制插入    二进制插入_牛客题霸_牛客网
思路: 要把 n 的二进制值插入 m 的第 j 位到第 i 位,只需要把 n 先左移 j 位,然 后再进行或运算( | )即可。
class BinInsert {
public:
    int binInsert(int n, int m, int j, int i) {
        // write code here
        m=m<

2. ACM编程题 标题:查找组成一个偶数最接近的两个素数     查找组成一个偶数最接近的两个素数_牛客题霸_牛客网
#include 
using namespace std;
bool is_prime(int num)//判断是否为素数
{
    for(int i=2;i>num)
    {
        for(int i=num/2;i>0;i--)
        {
            if(is_prime(i)&&(is_prime(num-i))){
            cout<

你可能感兴趣的:(笔记,1024程序员节,c++,算法)