• c++复习题


    (1)标准输入流cin:istream类的对象。(2)标准输出流cout:ostream类的对象。

    (3)非缓冲型标准出错流cerrostream类的对象。(4)缓冲型标准出错流clogostream类的对象

     

    (10)下列关于虚基类的描述,错误的是

    A)设置虚基类的目的是为了消除二义性

    B)虚基类的构造函数在非虚基类之后调用

    C)若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用

    D)若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数

     

     

    extern用于声明外部变量的register声明寄存器类型变量

     

    多态性有两种静态多态性和动态多态性,静态多态性是指调用同名函数,由于参数

    的不同调用不同的同名函数;动态多态性是指不同对象调用同名函数时,由于对象不同调用不同

    的同名函数。 多态性肯定具有相同的函数名

     

    派生类的成员一个是来自基类,一个来自本身,所以派生类是基类的扩展,也是基

    类的具体化和特殊化,派生类是对基类扩展

     

    substr取子字符串,第1个参数表示要截取子串在字符串中的位置,第2个表示取多少个字符。

     

    要输出this->x=x表达式的值要加括号。

    [修改]cout<<this->x=x<<endl;

     

    #include <iostream.h>

    class Test

    {int x,y;

    public:

    Test(int i,int j=0)

    {x=i;y=j;}

    int get(int i,int j)

    {return i+j;}

    };

    void main()

    {Test t1(2),t2(4,6);

    int (Test::*p)(int,int=10);

    p=Test::get;

    cout<<(t1.*p)(5)<<endl;

    Test *p1=&t2;

    cout<<(p1->*p)(7,20)<<endl;

    }

    答案:15  27

    [解析]指向类成员函数的指针的使用,*p指向Test类中有两个参数的函数的一个指针。

    PTest::get.这样p就和get发生了联系。(t1.*p)(5)等价于调用一个参数的get函数。

     

    9. 基类的公有成员在派生类中的访问权限由___决定。

    答案:访问控制方式或继承方式

     

    13. 类模板用来表达具有___的模板类对象集。

    答案:相同处理方法

    [解析]模板特点是不同的数据具有相同的处理方法的抽象。

    14. C++程序的源文件扩展名为___。

    答案:cpp

    [解析]源程序*.cpp,目标文件为*.obj,可执行程序*.exe

    15. 在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是___的头文件。

    答案:自定义

    [解析]include装入文件有两种方式<>和“”,一是系统的,一是自定义文件。

     

    #include <iostream.h>

    void main()

    { int *p1;

    int **p2=&p1;

    int b=20;

    p1=&b;

    cout<<**p2<<endl;

    }

    答案:20

    [解析]p1指向b,而p指向p1的地址。*p2表示p1的地址,p1的地址就是&b,即*p2是&b,所以

    **p2就是b变量的值。

     

    #include <iostream>

    #include <string.h>

    using namespace std;

    class mystring

    {public:

    char * pdata;

    mystring(int len)

    {pdata=new char[len+1];

    }

    ~mystring()

    {delete pdata;}

    void show(){cout<<pdata<<endl;}

    };

    void fun(mystring** array,int len)

    {mystring*old=*array;

    _______;

    memcpy(*array, old, len);

    }

    void main()

    {mystring str(20);

    mystring*pstr=&str;

    mystring**ppstr=&pstr;

    strcpy(str.pdata,"hello,andylin");

    fun(ppstr, 20);

    _______

    }

    答案:*array=new mystring(len);,(**ppstr).show();或str.show();

    [解析]调用mystring类的构造函数开辟空间,后进行字符的复制。输出可以直接使用str或者

    使用二级指针。

     

     

    #include <iostream>

    #include <string>

    using namespace std;

    template<class T>

    void Swap(T& a,T& b)

    {T temp;

     temp=a,a=b,b=temp;

    }

    void main()

    {int a=5,b=9;

    char s1[]="Hello",s2[]="hi";

    Swap(a,b);

    Swap(s1,s2);

    cout<<"a="<<a<<",b="<<b<<endl;

    cout<<"s1="<<s1<<",s2="<<s2<<endl;

    }

    答案:char s1[]="Hello",s2[]="hi";使用Swap(s1,s2)调用交换的是地址。字符指针作实

    参,形参值发生改变,实参也就发生变化。

     [修改]char *s1="Hello",*s2="hi";

     

    ios::binary,采用二进制形式ios::app定位到文件尾部。

     

     对于int *pa[5];的描述,正确的是()

    A. pa是一个指向数组的指针,所指向的数组是5个int型元素

    B. pa是一个指向某个数组中第5个元素的指针,该元素是int型变量

    C. pa[5]表示某个数组的第5个元素的值

    D. pa是一个具有5个元素的指针数组,每个元素是一个int型指针

    答案:D

    解析:指针数组:数组元素都是相同类型的指针,相同类型的指针是说指针所指向的对象

    类型是相同的。例如,语句int *pa[5];定义了一个指针数组。在指针数组的定义中有两个运

    算符:*和[],运算符[]的优先级高于*,所以*pa[5]等价于*(pa[5]),pa[5]表示一

    个数组,而*表示后面的对象为指针变量,合在一起*pa[5]表示一个指针数组。该数组包含5个

    元素,每个元素都是指向int型的指针。所以选择D选项。

     

    3. 设类A有成员函数void f(void);若要定义一个指向类成员函数的指针变量pf来指向f,该

    指针变量的声明语句是:___。

    答案:void (A::*pf)(void)=&A::f;

    [解析]void(A::*pf)(void)=&A::f;指向成员函数的指针,它相当于两条语句

    :void(A::*pf)(void);和pf=&A::f;。

     

    重载的运算符保持其原有的___、优先级和结合性不变。

    答案:操作数

     

    istream和ostream的直接基类是ios。

     

    定义向量列表vector<int>A(10,1),使用两个参数,10表示长度,1表示数值。

     

     在C++中有两种参数传递方式:传值和___。

    答案:传引用

    [解析](1)传值调用又分为数据传值调用和地址传值调用。

     

    #include <iostream.h>

    void main()

    {int a,b,c;

    char ch;

    cin>>a>>ch>>b>>c;//从键盘上输入1.5×c×10×20,×表示一个空格

    cout<<a<<endl<<ch<<endl<<b<<endl<<c<<endl;

    }

    答案:1

    .

    5

    0

    [解析]使用cin进行输入字符的输入的问题。1-->a,.-->ch,5-->b,空格转换为零给了c。

     

     函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为()

    A. 1

    B. 2

    C. 4

    D. 5

    答案:B

    解析:(exp1,exp2)、(exp3,exp4,exp5)表示是两个逗号表达式,值是最后一个值,相当于两个

    参数。因此实参的个数是2。

     

    普通成员函数可以调用静态函数,相反静态函数不能调用普通成员函数,这与普通

    函数与常成员函数相同。

     

    13. 在编译指令中,宏定义使用哪个指令()

    A. #if

    B. #include

    C. #define

    D. #error

    答案:C

    解析: #if条件编译,#include文件包含,#error错误处理。

     

    :除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算

    符和三目运算符"?:"以外,C++中的所有运算符都可以重载。

     

    20. 在C++语言中,数据封装要解决的问题是()

    A. 数据的规范化

    B. 便于数据转换

    C. 避免数据丢失

    D. 防止不同模块之间数据的非法访问

    答案:D

    解析:封装是指把对象属性和操作结合在一起,构成独立的单元,它的内部信息对外界是

    隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。类是数据封装

    的工具,对象是封装的实现。类的访问控制机制体现在类的成员中可以有公有成员、私有成员和

    保护成员。对于外界而言,只需要知道对象所表现的外部行为,而不必了解内部实现细节。封装

    体现了面向对象方法的“信息隐蔽和局部化原则”。

     

     C++派生类使用两种基本的面向对象技术:第一种称为性质约束,即对基类的性质加以限制

    ;第二种称为___,即增加派生类的性质。

    答案:性质扩展

    [解析]派生类通过继承可以从基类中获得成员,也可以自定义成员。

     

    6. 面向对象的四个基本特性是多态性、继承性、和封装性___。

    答案:抽象

     

    答案:(*this).x=x; (*this).y=y;,cout<<x<<"+"<<y<<"="<<x+y<<endl;

    [解析]形参同数据成员同名,使用this来访问。

     

    #include<iostream.h>

    class a

    {public:

    a(int i=10){x=i;cout<<"a:"<<x<<endl;}

    int x;

    };

    class b:public a

    {public:

    b(int i):A(i){x=i;cout<<"b:"<<x<<", "<<a::x<<endl;}

    private:

    a A;

    int x;

    };

    void main()

    {b B(5);

    }

    答案:a:10

    a:5

    b:5,10

    [解析]定义对象B,先调用基类构造函数,在b构造函数中使用的是A(i),注意大小写,不

    是a(i),也就是说调用基类的构造函数时没有实参值,所以采用默认值;在初始化类成员A,即

    A(i),i=5,所以输入为a:5;最后是b类的构造函数,x=5,来自基类x=10,输出b:5,10。

     

    (1)全局变量:在函数外部定义的变量称为全局变量,其作用域为:从定义变量的位置开始

    到源程序结束。全局变量增加了函数之间数据联系的渠道,全局变量作用域内的函数,均可使用

    、修改该全局变量的值,但是使用全局变量降低了程序的可理解性,软件工程学提倡尽量避免使

    用全局变量。

    (2)局部变量:在函数内部定义的变量称为局部变量,其作用域为:从定义变量的位置开始

    到函数结束。局部变量包含自动变量(auto)静态变量(static)以及函数参数。

    auto变量意味着变量的存储空间的分配与释放是自动进行的。说明符auto可以省略。函数中

    的局部变量存放在栈空间。在函数开始运行时,局部变量被分配内存单元,函数结束时,局部变

    量释放内存单元。因此,任两个函数中的局部变量可以同名,因其占有不同的内存单元而不影响

    使用。这有利于实现软件开发的模块化。

    static变量是定义在函数体内的变量,存放在静态存储区,不用栈空间存储,其值并不随存

    储空间的释放而消失。

     

    运算符的重载,前缀先让变量变化。调用++a,等价为a.operator++(),注意无参

    的形式。后缀的话a++,等价于a.operator(0),带形参,形参名可省。

     

    8. 解决定义二义性问题的方法有()

    A. 只能使用作用域分辨运算符

    B. 使用作用域分辨运算符或成员名限定

    C. 使用作用域分辨运算符或虚基类

    D. 使用成员名限定或赋值兼容规则

    答案:B

    解析:解决二义性问题主要要两种方法:(1)赋值兼容规则;(2)虚基类。

     

    cin、cout、cerr和clog中cin用于输入,cout用于输出,cerr、clog错误处理。

     

    int a=32;

    double c=32;

    cout.setf(ios::hex);

    cout<<"hex:a="<<a<<",c="<<c<<endl;

    cout.unsetf(ios::hex);

    程序的输出结果为___。

    答案: hex:a=20,c=32

    [解析]用十六进制只能输出整型数据,而不能将其它类型数据转换成十六进制的数据输出。所

    以double类型不变仍然是32(double类型)。

     

    类成员包括成员函数和数据成员,都可以使用访问权限public、private和protected来修

    饰,而普通的变量不能使用访问权限来说明。

     

    10. 下列有关模板和继承的叙述正确的是 ()

    A. 模板和继承都可以派生出一个类系

    B. 从类系的成员看,模板类系的成员比继承类系的成员较为稳定

    C. 从动态性能看, 继承类系比模板类系具有更多的动态特性

    D. 相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系

    答案:D

    解析:类是相同类型事物的抽象,具有不同的操作。而模板是不同类型的事物,具体相同

    的操作的抽象。类模板的实例化后,各个对象没有任何关系。而类对象是通过派生、继承等关系

    的关系。

     

    13. 类模板用来表达具有___的模板类对象集。

    答案:相同处理方法

    [解析]模板特点是不同的数据具有相同的处理方法的抽象。

    14. 如果通过同一个基类派生一系列的类,则将这些类总称为___。

    答案:类族

    [解析]单继承方式派生的众多的类。

    15. 面向对象的四个基本特性是多态性、继承性、和封装性___。

    答案:抽象

     

    string str("HelloC++");

    cout<<str.substr(5,3);

    程序的输出结果是___。

    答案: C++

     

     

     

     

    ---------------------------------------------------------------------------------------------------------------------------------------

    考完补:

    考了很多文件读写,,爆炸-_-||

  • 相关阅读:
    Lua 数组
    javascript debugger
    Lua 字符串
    警告
    Lua中获取table长度
    Lua 运算符
    Lua 函数
    lua if 流程控制
    pairs 和 ipairs 的区别
    Lua 循环
  • 原文地址:https://www.cnblogs.com/yijiull/p/7058780.html
Copyright © 2020-2023  润新知