• C++16 --- C++相关试题及相关知识点整理


    一、填空题()

    1.派生类的主要用途是可以定义其基类中_______。
    2.当建立_______,程序自动调用该类的构造函数。
    3.定义重载函数时,应在_______上有所不同。
    4.类是用户定义的类型,具有类类型的变量称作_______。
    5.当一个成员函数被调用时,该成员函数的_______指向调用它的对象。
    6.拷贝构造函数通过_______使用引用来初始化创建中的对象。
    7.在C++中有二种_______方式即值传递和_______传递。

    答案:

    1、同名同参的虚函数
    2、对象/本类对象
    3、参数列表 
    4、对象
    5、this指针
    6、通过本类对象
    7、参数传递方式、引用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1、同名同参的虚函数

    相当于将同名同参是虚函数重新写了一下,主要是为了虚函数的实现多态,派生类通过定义基类,把基类中同名同参的虚函数重新定义之后,就可以去实现多态

    2、对象/本类对象

    对象。建立对象调用该类对象的构造函数。调用构造函数的步骤分为三部:传参、根据数据成员在类里面的声明顺序开辟空间、执行构造函数函数体。有继承和组合的时候:先按照继承顺序调用基类的构造、按照组合顺序调用组合的构造、调用自身的构造。

    3、参数列表 (包括参数的类型、个数、顺序)

    函数重载的规则:

    函数名称必须相同。
    参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
    函数的返回类型可以相同也可以不相同。
    仅仅返回类型不同不足以成为函数的重载。
    
    • 1
    • 2
    • 3
    • 4

    函数重载相关知识点博客链接:http://t.csdn.cn/Ne3MG

    4、对象

    类与对象的区别:

    类是抽象出来的,在内存中不占空间。
    对象是类的实例化,具体化,需要占空间。
    
    • 1
    • 2

    5、this指针

    类的非静态成员成员函数有一个隐藏的this指针,静态成员函数是没有this指针的。

    6、通过本类对象

    即拷贝构造函数的参数就是本类对象的引用。
    1)拷贝构造函数的参数类型:
    值类型、指针类型、引用类型
    2)调用拷贝构造函数的三种情况:
    用一个本类的旧对象去构造另一个本类的新对象。
    类类型的值传递
    返回类型为值传递的时候,会调用拷贝构造。
    浅拷贝(无指针,直接调用默认拷贝构造函数)和深拷贝(有指针)

    7、参数传递方式、引用

    二、完成程序题()

    1、在下面程序的底画线处填上适当的字句,使该程序执行结果为60。

    # include   
    class base{int X;  
    publicvoid int (int initX){X=initX; }  
    int  Getnum() {return  X+7; }  
    void main()  
    {_______  
    _______  
    cout<<test.Getnum();  
    }  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    base test;
    test.init(53);
    
    • 1
    • 2

    2、在下面程序的底画线处填上适当的字句,完成类中成员函数的定义。

    # include   
    class box{     privateint color;int upx,upy;int lowx,lowy;  
    publicfriend int same_color(line a,box b);  
    _______;  
    void define_box(int x1,int y1,int x2,int y2){upx=x1;upy=y1;}  
    };  
    class line{    privateint color;int startx,starty;int len;  
    public∶  
    friend_int same_color(line a,box b);  
    _______;  
    void define_line(int x,int y){startx=x;}  
    };  
    int same_color(line a,box b)  
    {if(a.color= =b.color)  
    return 1;  
    return 0;}  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    void set(int c){color = c;}
    void set(int c){color = c;}
    
    • 1
    • 2

    friend int same_color(line a,box b); 可知,该为一个友元函数,为一个普通函数。

    3、在下面程序的底画线处填上适当的字句,完成程序。

    # include   
    class A{   
    _______(int i){cout<<i<<endl;}  
    void g(){cout<<”g\n”;}  
    }; 
    closs B∶A{   
    publicvoid h(){cout<<”h\n”;}  
    _______;  
    };  
    void main(); 
    {   B d1;  
    d1.f(6);  
    d1.h();  
    }  
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    virtual void f
    void f(int i){cout<<"i"<
    • 1
    • 2

    构成多态

    4、在下列程序的空格处填上适当的字句,使输出为:0,8,5。

    # include   
    # include   
    class Magic{  
    double x;  
    publicMagic(double d=0.00)x(fabs(d)){}  
     Magic _______{return Magic(sqrt(x*x+c.x*c.x));}  
    _______<<(ostream & os,Magic c){return os<<c.x;}  
    };  
    void main()  
    {Magic ma;  
    cout<<ma<<,<<Magic(-8)<<,<<ma+Magic(-3)+Magic(-4);  
    }  
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    operator+(Magic &c)
    friend ostream& operator  //这里需要在类外定义
    
    • 1
    • 2

    三、问答题()

    1、简述引用和指针

    引用和指针的区别:
    1、初始化:
    引用声明的时候必须要初始化,指针可以不初始化,但会出现野指针;
    2、NULL;
    引用在初始化的时候不能初始化为NULL,但指针可以初始化为NULL;
    3、修改:
    引用一旦和实体相关起来就不可以修改,指针可以改变;
    4、大小:
    引用的大小和实体大小一样,指针大小永远是4字节;

    相同点:都能通过所关联的变量修改关联的值:

    2、C++的三大特性是什么?请简单描述。

    3、谈谈对this指针的理解。

    1)定义

    在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。

    2)this只能在成员函数中使用

    成员函数默认第一个参数为T* const register this。
    (友元函数,全局函数不是成员函数)

    3)this指针不能再静态函数中使用

    静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用。

    4)this指针的创建

    this指针在成员函数的开始执行前构造的,在成员的执行结束后清除。

    5)this指针只有在成员函数中才有定义。

    创建一个对象后,不能通过对象使用this指针。也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。
    ————————————————
    版权声明:本文为CSDN博主「我是一名好学者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_43751983/article/details/91147918

    四、综合应用题()

    1、分析下列程序可能的输出结果。

    # include “iostream.h”  
    class test{privateint num;  
    float fl;  
    publictest( );  
    int getint( ){return num;}  
    float getfloat( ){return fl;}test( );  
    };  
    test∶∶test( );  
    {cout<<″lnitalizing default<<endl;  
    num=0;fl=0.0;  
    }  
    test∶∶~test( )  
    {cout<<″Desdtructor is active″<<endl;}  
    int main( )  
    {test array[2];  
    cout<<array[1].get int ( )<<″ ″<<array[1].getfloat()<<endl;  
    } 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    lnitalizing default
    lnitalizing default
    0 0.0
    Desdtructor is active
    Desdtructor is active
    
    • 1
    • 2
    • 3
    • 4
    • 5

    五、编程题

    1、写一个字符串类(String),要求至少要有赋值操作符,copy构造函数, +操作符。

    试题

    一、填空题()  
    1.派生类的主要用途是可以定义其基类中_______。  
    2.当建立_______,程序自动调用该类的构造函数。  
    3.定义重载函数时,应在_______上有所不同。  
    4.类是用户定义的类型,具有类类型的变量称作_______。  
    5.当一个成员函数被调用时,该成员函数的_______指向调用它的对象。  
    6.拷贝构造函数通过_______使用引用来初始化创建中的对象。  
    7.在C++中有二种_______方式即值传递和_______传递。    
    二、完成程序题()  
    1.在下面程序的底画线处填上适当的字句,使该程序执行结果为60# include   
    class base{int X;  
    publicvoid int (int initX){X=initX; }  
    int  Getnum() {return  X+7; }  
    void main()  
    {_______  
    _______  
    cout<<test.Getnum();  
    }  
    2.在下面程序的底画线处填上适当的字句,完成类中成员函数的定义。  
    # include   
    class box{     privateint color;int upx,upy;int lowx,lowy;  
    publicfriend int same_color(line a,box b);  
    _______;  
    void define_box(int x1,int y1,int x2,int y2){upx=x1;upy=y1;}  
    };  
    class line{    privateint color;int startx,starty;int len;  
    public∶  
    friend_int same_color(line a,box b);  
    _______;  
    void define_line(int x,int y){startx=x;}  
    };  
    int same_color(line a,box b)  
    {if(a.color= =b.color)  
    return 1;  
    return 0;}  
    
    3.在下面程序的底画线处填上适当的字句,完成程序。  
    # include   
    class A{   
    _______(int i){cout<<i<<endl;}  
    void g(){cout<<”g\n”;}  
    }; 
    closs B∶A{   
    publicvoid h(){cout<<”h\n”;}  
    _______;  
    };  
    void main(); 
    {   B d1;  
    d1.f(6);  
    d1.h();  
    }  
    
    4.在下列程序的空格处填上适当的字句,使输出为:085# include   
    # include   
    class Magic{  
    double x;  
    publicMagic(double d=0.00)x(fabs(d)){}  
    Magic _______{return Magic(sqrt(x*x+c.x*c.x));}  
    _______<<(ostream & os,Magic c){return os<<c.x;}  
    };  
    void main()  
    {Magic ma;  
    cout<<ma<<,<<Magic(-8)<<,<<ma+Magic(-3)+Magic(-4);  
    }  
    
    三、问答题()
    1.简述引用和指针
    2. C++的三大特性是什么?请简单描述。
    3. 谈谈对this指针的理解。
    四、综合应用题()  
    1.分析下列程序可能的输出结果。)  
    # include “iostream.h”  
    class test{privateint num;  
    float fl;  
    publictest( );  
    int getint( ){return num;}  
    float getfloat( ){return fl;}test( );  
    };  
    test∶∶test( );  
    {cout<<″lnitalizing default<<endl;  
    num=0;fl=0.0;  
    }  
    test∶∶~test( )  
    {cout<<″Desdtructor is active″<<endl;}  
    int main( )  
    {test array[2];  
    cout<<array[1].get int ( )<<″ ″<<array[1].getfloat()<<endl;  
    }  
    
    五、编程题() 
    1.写一个字符串类(String),要求至少要有赋值操作符,copy构造函数, +操作符。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
  • 相关阅读:
    长短期记忆网络(LSTM)原理解析
    04-树5 Root of AVL Tree
    边缘计算是如何为元宇宙提供动力的?
    LCR 024.反转链表
    nextJs13:如何全局配置antd的日期组件datepicker等都显示中文(2步)
    kafka学习之三_信创CPU下单节点kafka性能测试验证
    easyExcel获取动态表头和筛选数据导出的问题
    ClickHouse 创建数据库建表视图字典 SQL
    浅谈架构.补缺.V2
    数学分析:势场
  • 原文地址:https://blog.csdn.net/kyrie_sakura/article/details/127889671