您的位置:首页 > 其它

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

2017-09-16 20:36 344 查看
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是系统调用,其他都是库函数
常见文件系统
系统函数

fcntl  文件控制  
open  打开文件  
creat  创建新文件  
close  关闭文件描述字  
read  读文件  
write  写文件  
readv  从文件读入数据到缓冲数组中  
writev  将缓冲数组里的数据写入文件  
pread 对文件随机读  
pwrite  对文件随机写 
5.下面说法错误的是()

在组合时,为了保证成员对象被正确清除,在组合类的析构函数中需要显式调用其成员对象的析构函数


在类的继承层次中,可以自动进行向上和向下类型转换.而且都是安全的


构造函数可以重载,析构函数不能重载


C++的派生类如果要覆盖一个继承到的成员函数,在基类中需要将该函数声明为virtual


解答:AB

A选项:在组合类的析构函数中并不需要显式调用其成员对象的析构函数,因为当执行组合类的析构函数
时,其数据成员也会被销毁,对于类成员对象来说,成员对象销毁时,程序会自动调用其析构函数;不过
对于组合类中new的指向类成员的指针,组合类需要自己去delete该指针;
B选项:显然是错的,在类继承层次中,基类在上,派生类在下,所以可以自动进行向上类型转换,即可
以使基类指针和引用指向派生类对象,而不可以使派生类指针和引用指向基类对象;
C选项:对的,构造函数可以根据参数的不同实现函数重载,而因为析构函数没有参数,对于一个类来说
也是唯一的,所以是不能重载的;
D选项:即派生类想要重写继承来的成员函数,需要用到virtual函数,来实现动态多态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐