• 大一下 C++考核题


    大一下学期校软C++试题

    一:判断题(对的填√,错的填×)

    1. delete会调用每一个成员的析构函数,而delete[] 只会调用一次析构函数。(×)

      • delete只会调用一次析构函数,delete[]会调用数组中每一个元素的析构数
      • new 与 delete 配套 new[] 与 delete[] 配套
    2. 可以建立int,float,double和数组的引用但不能定义指向引用的指针。(×)

      c++中,引用可以说只是某个变量的别名,所谓别名,是和指针类型区分开的:指针类型也可以指向某个变量,但指针类型本身也是一个变量,而引用实际上不是一个变量。更本质来说,可以理解为引用没有自身的地址,不占用内存空间(这里为了简化问题可以这样考虑)。因此,声明引用数组没有办法分配空间,因为根本就没有空间可以分配给引用。所以不能声明和定义引用数组

      • 引用 没有内存,没有地址,只是一个变量的别名,

      • 而指针的定义是需要地址的所以无法定义指向引用的指针

    3. 类的static成员:类的全局变量,被类的所有对象共享,包括派生类的对象,能在构造函数内初始化,也可以用const修饰的static数据成员在类内初始化。(√)

    用static修饰类的数据成员实际使其成为类的全局变量,会被类的所有对象共享,包括派生类的对象。因此,static成员必须在类外进行初始化,而不能在构造函数内进行初始化,不过也可以用const修饰static数据成员在类内初始化 。

    1. struct和class都可以定义类,struct定义类的成员默认是共有的,而class类定义的成员默认是私有的。,但在继承的的时候,class定义类和struct定义类都是默认private继承。(×)
      • struct 默认是public继承
      • class 默认是private继承
    2. C++大部分的运算符都可以重载如+= -= / * << >>以及 ::等。(×)
      • 有五个运算符不能重载 .     .*     ::     ?:
    3. 构造函数的名字与类名相同,可以重载,可以写成虚函数,但不能显式调用构造函数。(×)
    4. 将类的一个对象赋值给该类的另一个对象时会调用拷贝构造函数 。(×)
      • a(b) 会调用拷贝构造函数 ,a=b 可以重载赋值符

    二:选择题

    1. 在C++中,要实现动态联编,必须使用(D)调用虚函数。

      A.类名 B.派生类指针 C.对象名 D.基类指针

      虚函数与动态联编

      实现动态联编用父类指针引用指向子类对象

    2. 下列有关继承和派生的叙述中,正确的是(C)

      A 派生类不能访问通过私有继承的基类的保护成员

      • private继承就是把基类中的public和protect成员变成派生类中的private

        派生类自身是可以访问自己的private成员的

      • 三种继承的区别

      B 多继承的虚基类不能够实例化

      C 如果基类没有默认构造函数,派生类就应当声明带形参的构造函数

      在派生类的构造函数中未显示调用基类的构造函数,此时基类的默认构造函数会被调用

      //因此,如果基类没有默认构造函数,而派生类又不显示调用基类的默认构造函数

      默认构造函数

      D 基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现

      可以被继承

    3. 下列关于this指针的说法正确的是(B)

      A this指针存在于每个函数之中

      • this指针是存在与类的成员函数中

      B在类的非静态函数中this指针指向调用该函数的对象

      C this指针是指向虚函数表的指针

      D this指针是指向类的函数成员的指针

      this是一个指针,它时时刻刻指向你这个实例本身

    4. 有如下程序:

    #include<iostream>
    using namespace std; 
    class Test{ 
    public: 
        Test(){}  
        ~Test(){
            cout<<'#';
        } 
    }; 
    int  main(){ 
        Test  temp[2], *pTemp[2];
        return 0; 
    } 
    
    执行这个程序输出星号(#)的个数为(B)
    
    A)1   B) 2   C)3   D)4
    
    • 类对象和类指针的区别

    • 析构的时候,temp[2] 的每一个元素调用一次析构函数 输出 ##

      *pTemp[2]是一个指针数组,里面包含两个指向 Test对象的指针,当作用域完毕的时候

      系统会销毁指针,而不是指向的对象,所以不会调用析构函数。

    三:填空题

    1. 在多态性的实现中,在基类与派生类的虚函数除名字相同外,____也必须相同。

      • 同名 同参数 同返回类型
    2. 有如下程序:

    #include<iostream>  
    using namespace std; 
    class MyClass{ 
    public:  
        MyClass(int i=0){cout<<1;} 
        MyClass(const MyClass&x){cout<<2;} 
        MyClass& operator=(const MyClass&x)
        {cout<<3; return *this;} 
        ~MyClass(){cout<<4;} }; 
    int main(){ 
        MyClass obj1(1),obj2(2),obj3(obj1); 
        obj1=obj2; 
        return 0; 
    }
    
    运行时的输出结果是________________ (1123444)
    
    • obj1(1) 调用默认构造函数 输出 1

      obj2(2) 调用默认构造函数 输出 1

      obj3(obj1) 调用拷贝构造函数 输出 2

      obj1 = obj2 重载 = 输出 3

      析构的时候倒着来 输出 444

    1. 将x+y中的+运算符用友元函数重载应声明为_______

      • friend T operator+( const T &a, const T &b );
    2. 有下类定义 ,代码填空

    Class A { 
        Char *a; 
        Public: 
        A():a(0){} 
        A(char *aa) {
         a=__________________; //把aa所指字符串拷贝到a所指向的存储空间
        Strcpy(a,aa); 
        ~A()  {delete [] a;}
     }; 
    
     a = new char[strlen(aa)+1]
    
    1. 请将下列程序补充完整,使得输出结果为“Destructor Derived Destructor Base”。
    #include <iostream>
    using namespace std; 
    class Base { 
        public: 
        virtual   ~Base(){ cout << "Destructor Base"<< endl; }
     }; 
    class Derived : public Base { 
        public: 
        ________________________;}//显然这里缺一个析构函数(输出题目的上半段话)
     }; 
    int  main () {  
        Base *pBase = new Derived;  //这里定义了一个指向 Derived类型对象的指针
        ______________________ ; //析构函数调用的时候,和构造函数是反着来的,就像一个栈
        // 先构造 Base 再构造Derived ,所以析构的时候,出栈的第一个就是Derived的析构,
        // 然后是 Base 的析构
        return  0;
    }
    
    public:
        virtual ~Derived(){ cout<<"Destructor Derived "};
    ----------------------------------------------------------
        delete pBase; //delete可以释放pBase指向的内存空间并调用析构函数
    
    
    
  • 相关阅读:
    P7473 [NOI Online 2021 入门组] 重力球
    CF896D Nephren Runs a Cinema
    [持续更新]一些有趣的数学问题
    [微积分与无穷级数]AMM Problems笔记
    [补题]SWERC-2018
    [补题]Asia Regional Contest, Tokyo, 2014

    [NOI2005]瑰丽华尔兹-单调队列优化DP
    [补题]2017多校D-BD-区间筛/二分+线段树
    [补题]2017多校5A/HDU6085-Rikka with Candies-bitset优化
  • 原文地址:https://www.cnblogs.com/lukelmouse/p/10530885.html
Copyright © 2020-2023  润新知