指针 和引用 || 静态成员函数 || 虚函数 || 系统调用和库函数 ||
2017-09-16 20:36
344 查看
1.以下说法错误的是:
不能空引用,但是可以有空指针
解答:B
指针,传地址方式;引用,所指对象的别名,对它的操作就是对实参的操作。指针和引用做为函数参数都可以改变实参
指针在使用过程中,可以对其重新赋值;引用在使用过程中自始至终指向初始化时所指,一般使用过程中不会改变。引用一旦成为某个变量的别名,在程序运行过程中不能修改这种指针关系。
引用必须有所指向,即声明的同时初始化,即不能有空引用;
指针可以为空,这也使得它在使用过程时总要受到检查,防止为空。
2.下列有关静态成员函数的描述中,正确的是:
解答:D
静态成员由该类的所有对象共享的,静态成员属于该类所有对象公有,可以被类对象调用;静态成员受private的限制
静态成员属于类和该类的所有对象,可以用类名直接调用
3.以下程序的输出是
解答:C
Base * pb = new Child(1),
首先创建子类对象,初始化为1;
func1()不是虚函数,所以pb->func1()执行的是基类的func1函数,i= 10,然后调用func2()函数;
这里的func2是虚函数,要往下派生类寻找,找到后执行派生类中的func2(),此时,i = 12;
最后执行pb->getValue(),结果为12
4.以下函数中,和其他函数不属于一类的是____。
解答:C
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api。
简明的回答是:函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。
pwrite是系统调用,其他都是库函数
常见文件系统
系统函数
fcntl 文件控制
open 打开文件
creat 创建新文件
close 关闭文件描述字
read 读文件
write 写文件
readv 从文件读入数据到缓冲数组中
writev 将缓冲数组里的数据写入文件
pread 对文件随机读
pwrite 对文件随机写
5.下面说法错误的是()
解答:AB
A选项:在组合类的析构函数中并不需要显式调用其成员对象的析构函数,因为当执行组合类的析构函数
时,其数据成员也会被销毁,对于类成员对象来说,成员对象销毁时,程序会自动调用其析构函数;不过
对于组合类中new的指向类成员的指针,组合类需要自己去delete该指针;
B选项:显然是错的,在类继承层次中,基类在上,派生类在下,所以可以自动进行向上类型转换,即可
以使基类指针和引用指向派生类对象,而不可以使派生类指针和引用指向基类对象;
C选项:对的,构造函数可以根据参数的不同实现函数重载,而因为析构函数没有参数,对于一个类来说
也是唯一的,所以是不能重载的;
D选项:即派生类想要重写继承来的成员函数,需要用到virtual函数,来实现动态多态。
指针和引用做为函数参数都可以改变实参
指针和引用都可以在定义后任意的改变指向
引用必须在创建的时候初始化,而指针则不需要
不能空引用,但是可以有空指针
解答: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函数,来实现动态多态。
相关文章推荐
- 库函数调用和系统功能调用/文件句柄和文件指针/指针和引用/C runtime lib和虚拟机
- 巧妙解决问题:&CMFCcodeDlg::RunCommands”创建指向成员的指针。MFC多线程调用要求调用的接口必须是全局函数或静态成员函数
- dotnet控制台应用程序的静态main函数中不能直接调用成员函数
- 静态变量赋初值只在函数第一次调用时起作用,若没有赋初值,系统自动赋0
- C++内存分配、函数调用(值传递、指针传递、引用传递)、返回值问题
- 库函数与系统调用函数的区别
- C++的静态成员函数指针
- C++静态函数中调用非静态成员函数或变量
- 函数指针 类成员函数指针 类静态成员函数指针 使用实例
- error: 函数调用缺少参数列表;请使用“&BinTree<char>::_PrintNode”创建指向成员的指针
- 成员函数指针作为形参调用
- 4.1 成员函数的各种调用方式(静态成员函数,非静态成员函数,虚拟成员函数)
- 函数调用三种方式:传值&传引用&传指针
- static函数 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针;类的static成员函数
- 函数调用三种方式:传值&传引用&传指针
- 函数 传值调用 指针调用 引用调用
- 静态成员函数调用非静态成员变量
- “Caculate::writehtml”: 函数调用缺少参数列表;请使用“&Caculate::writehtml”创建指向成员的指针
- 函数调用缺少参数列表;请使用“&Student::Printf”创建指向成员的指针 问题解析
- 类中静态成员函数调用成员变量的发法(单件模式)