题目1: Linux指令怎么查看占用内存情况,怎么查看占用端口情况?
详情连接
可以使用top命令用于查看进程的CPU和内存使用情况,报告内存总量;
可以使用vmstat命令对内存使用情况进行统计
题目2:如何查找一个类是在哪里定义的?
放在你要查找的类,按下Ctrl + 鼠标左键点击
或者鼠标右键 + 转到定义
多态是怎么实现的?
多态的本质就是基类调用子类的函数;涉及到的C++特性有继承,封装。首先函数必须是虚函数,也就是virtual打头的函数。子类重写基类的虚函数,在调用的时候,实现动态绑定函数。因为虚函数表的地址是不变的,不管类型如何改变,但是对象内虚函数表的指针是不变的。
虚表,编译器一旦发现你的类声明有虚函数,就会生成虚函数表, 并生成一个指向该表的指针;如果子类继承自基类,基类中有虚函数,那么子类中和基类中虚函数同名的函数就自动变成虚函数。
当你调用
构造函数可以是虚函数吗?为什么?
不可以
析构函数可以是虚函数吗?why?
必须是,因为如果析构函数不是虚函数,对于派生类,来讲,构造的时候,先构造基类,在派生类,析构时如果你的基类的构造函数不是虚函数,将无法调用派生类析构函数,造成内存泄漏。
const是数字签名吗?有什么作用?区分只读操作和赋值操作。因为const只能初始化,不能赋值。
首先要理解什么是函数签名。
C++中的函数签名(function signature):包含了一个函数的信息,包括函数名、参数类型、参数个数、顺序以及它所在的类和命名空间。普通函数签名并不包含函数返回值部分,如果两个函数仅仅只有函数返回值不同,那么系统是无法区分这两个函数的,此时编译器会提示语法错误。函数签名用于识别不同的函数,函数的名字只是函数签名的一部分。在编译器及链接器处理符号时,使用某种名称修饰的方法,使得每个函数签名对应一个修饰后名称(decorated name)。编译器在将C++源代码编译成目标文件时,会将函数和变量的名字进行修饰,形成符号名,也就是说,C++的源代码编译后的目标文件中所使用的符号名是相应的函数和变量的修饰后名称。C++编译器和链接器都使用符号来识别和处理函数和变量,所以对于不同函数签名的函数,即使函数名相同,编译器和链接器都认为它们是不同的函数。不同的编译器厂商的名称修饰方法可能不同,所以不同的编译器对于同一个函数签名可能对应不同的修饰后名称。
const函数在末尾时,const是函数签名的一部分。此时,声明一个成员函数的时候用const关键字是用来说明这个函数是 "只读(read-only)"函数,也就是说明这个函数不会修改任何数据成员(object)。 为了声明一个const成员函数, 把const关键字放在函数括号的后面。声明和定义的时候都应该放const关键字。任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。同样,如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性,一看就知道这个函数的大概功能。
也就是说此时con