指针 和引用 || 静态成员函数 || 虚函数 || 系统调用和库函数 ||

来源:互联网 发布:淘宝网天猫孕妇装 编辑:程序博客网 时间:2024/05/29 06:38
1.以下说法错误的是:
  • 指针和引用做为函数参数都可以改变实参
  • 指针和引用都可以在定义后任意的改变指向
  • 引用必须在创建的时候初始化,而指针则不需要
  • 不能空引用,但是可以有空指针

解答:B

指针,传地址方式;引用,所指对象的别名,对它的操作就是对实参的操作。指针和引用做为函数参数都可以改变实参
指针在使用过程中,可以对其重新赋值;引用在使用过程中自始至终指向初始化时所指,一般使用过程中不会改变。引用一旦成为某个变量的别名,在程序运行过程中不能修改这种指针关系。
引用必须有所指向,即声明的同时初始化,即不能有空引用;
指针可以为空,这也使得它在使用过程时总要受到检查,防止为空。

2.下列有关静态成员函数的描述中,正确的是:
静态数据成员可以在类体内初始化
静态数据成员不可以被类对象调用
静态数据成员不受private控制符作用
静态数据成员可以直接用类名调用
解答:D

c++语言中类中的静态数据成员必须在类体外初始化,只有静态的常量整形数据成员才可以在类定义中初始,如    static const int c=2; 而常实型静态数据成员不可以

class circle{int a; // 普通变量,不能在类中初始化static int b; // 静态变量,不能在类中初始化static const int c=2; // 静态整型常量,可以在类中初始化static const double PI=3.1416;//error C2864: 只有静态常量整型数据成员才可以在类中初始化} ;

静态成员由该类的所有对象共享的,静态成员属于该类所有对象公有,可以被类对象调用;静态成员受private的限制
静态成员属于类和该类的所有对象,可以用类名直接调用
3.以下程序的输出是
class Base {    public:    Base(int j): i(j)  {}    virtual~Base() {}    void func1() {        i *= 10;        func2();    }    int getValue() {        return  i;    }    protected:    virtual void func2() {        i++;    }    protected:    int i;};class Child: public Base {    public:    Child(int j): Base(j) {}    void func1() {        i *= 100;        func2();    }    protected:    void func2() {        i += 2;    }};int main() {    Base * pb = new Child(1);    pb->func1();    cout << pb->getValue() << endl; delete pb; }

  • 11
  • 101
  • 12
  • 102
解答:C

Base * pb = new Child(1),首先创建子类对象,初始化为1;
func1()不是虚函数,所以pb->func1()执行的是基类的func1函数,i= 10,然后调用func2()函数;
这里的func2是虚函数,要往下派生类寻找,找到后执行派生类中的func2(),此时,i = 12;
最后执行pb->getValue(),结果为12
4.以下函数中,和其他函数不属于一类的是____。
  • fwrite
  • putc
  • pwrite
  • putchar
  • getline
  • scanf
    解答:C

    Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api。
    简明的回答是:函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。

    pwrite是系统调用,其他都是库函数
    常见文件系统 系统函数
    1. fcntl  文件控制  
    2. open  打开文件  
    3. creat  创建新文件  
    4. close  关闭文件描述字  
    5. read  读文件  
    6. write  写文件  
    7. readv  从文件读入数据到缓冲数组中  
    8. writev  将缓冲数组里的数据写入文件  
    9. pread 对文件随机读  
    10. pwrite  对文件随机写 
    5.下面说法错误的是()
    • 在组合时,为了保证成员对象被正确清除,在组合类的析构函数中需要显式调用其成员对象的析构函数
    • 在类的继承层次中,可以自动进行向上和向下类型转换.而且都是安全的
    • 构造函数可以重载,析构函数不能重载
    • C++的派生类如果要覆盖一个继承到的成员函数,在基类中需要将该函数声明为virtual
    解答:AB

    A选项:在组合类的析构函数中并不需要显式调用其成员对象的析构函数,因为当执行组合类的析构函数
    时,其数据成员也会被销毁,对于类成员对象来说,成员对象销毁时,程序会自动调用其析构函数;不过
    对于组合类中new的指向类成员的指针,组合类需要自己去delete该指针;
    B选项:显然是错的,在类继承层次中,基类在上,派生类在下,所以可以自动进行向上类型转换,即可
    以使基类指针和引用指向派生类对象,而不可以使派生类指针和引用指向基类对象;
    C选项:对的,构造函数可以根据参数的不同实现函数重载,而因为析构函数没有参数,对于一个类来说
    也是唯一的,所以是不能重载的;
    D选项:即派生类想要重写继承来的成员函数,需要用到virtual函数,来实现动态多态