C++基础知识3

1、为什么构造函数不能是虚构造?
虚函数对应一个虚表vtale,这个表的地址是存储在对象的内存空间的。如果将构造函数设置为虚函数,就需要到虚表中调用,但这时候对象没有实例化,没有内存分配,虚表就不存在,故构造函数不能为虚函数。
2、重载和重写的区别?
(1)、重载指得是同一 水平区域内,例如类内有多个同名函数,这些函数的参数列表不同,重载是在编译时绑定对象的,是静态多态。
(2)、重写指得是垂直区域,例如父子类,父类将函数定义为虚函数,子类重新定义函数体,父子类的函数名、参数列表是同样的。重写是在运行时绑定对象的,是动态多态。
3、公有继承、私有继承、受保护继承?
(1)、公有继承,派生类对象可以访问基类中的公有成员,派生类的成员函数可以访问基类中的共有和受保护成员;
(2)、私有继承,基类的成员只能被直接派生类的成员访问,无法再往下继承;
(3)、受保护继承,基类的成员只能被直接派生类的成员访问,无法再往下继承。
4、如何阻止一个类被实例化?
(1)、将类定义为抽象类或则将构造函数私有化;
(2)、不允许类外部创建类对象,只能在类内部创建对象。
5、堆和栈的区别?
(1)、申请方式不同。栈上的内存是操作系统自动分配和释放的,堆上的内存是由程序员申请和释放的,申请时需要指定内存大小;
(2)、栈的内存地址是从高到低扩展的,内存区域是连续的,大小有限;堆的内存地址是从低到高扩展的,是不连续的内存区域,空间相对大且灵活;
(3)、栈由系统分配和释放速度快,堆由程序员控制,一般较慢,且易产生碎片。
6、C++函数中值传递有哪几种?
引用传递、值传递、指针传递
7、字符数组和字符串的差异?
字符串会在末尾自动添加‘\0’,比字符数组多一个字符长度。
8、类使用static成员的优点,如何访问?
(1)、static成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突;
(2)、可以实施封装。static成员可以是私有成员,而全局对象不可以;
(3)、static成员是与特定类关联的,可清晰地显示程序员地意图;
(4)、static数据成员必须在类定义体外部定义;
(5)、static成员不是通过类构造函数进行初始化,也不能在类地声明中初始化,而是应该在定义时进行初始化。
9、如何引用一个已经定义过地全局变量?
可以引用头文件的方式,也可以用extern关键字。如果用引用头文件的方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错;如果用extern方式引用时,如果将变量写错了,编译期不会报错,而是在连接时报错。
10 何为友元?
(1)、有些私有属性也想让类外特殊的一些函数或者类访问,就用到了友员;
(2)、友元函数、友员类;
(3)、友员不是类的一部分;
(4)、友员不受类中访问级别的限制;
(5)、友员关系不能被继承,友员关系是单向的,不具交换性。

你可能感兴趣的:(c++)