美文网首页
C++ 常见问题

C++ 常见问题

作者: Youzhicha | 来源:发表于2020-11-11 21:26 被阅读0次

1. 什么是多态 ?其有哪些实现方式,不同实现方式有河区别 ?

多态是:不同类的对象收到相同的消息时,得到不同的结果。

方法的重载和重写,都是实现多态的方式。

重载,是编译时的多态性。其发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载。

重写,是运行时的多态性。其发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

2. const, static 有啥区别 ?

const,就是只读的意思,只在声明中使用。

static, 规定作用域和存储方式。
(1)对于局部变量,
static 规定其为静态存储方式, 每次调用的初始值为上一次调用的值, 调用结束后存储空间不释放。

(2)全局变量, 如果以文件划分作用域的话, 此变量只在当前文件可见;对于static函数也是在当前模块内函数可见。

函数 :

const,
返回只读变量的函数。某个对象生存期内是常量,而对于整个类而言却是可变的。
const常量成员变量不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。

static,
规定此函数只在当前模块可见。
类的静态成员函数,成员变量是和类相关的,不是和类的具体对象相关,即使没有具体的对象,也能调用类的静态成员函数,成员变量。
static静态成员变量不能在类内部初始化。

类:
const,
一般不修饰类。
static,
C++中似乎没有静态类这个说法, 一般还是拿类当特殊的变量来看。

3. 对虚函数理解 ?

虚函数,是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这样的函数调用发生在运行阶段,称为动态联编。其是泛型技术之一。

泛型技术:使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。

虚函数的工作原理

编译器处理虚函数的方法:

为每个类对象,添加一个隐藏成员,其保存了一个指向函数地址数组的指针,称为虚表指针(vptr),这种数组成为虚函数表(virtual function table, vtbl)。即:

(1)每个类,使用一个虚函数表(虚函数的地址表);
(2)每个类对象,用一个虚表指针;
(3)派生类对象,也将包含一个虚表指针,指向派生类虚函数表。
(4)如果基类中的虚方法没有在派生类中重写,那么派生类将继承基类中的虚方法。
(5)派生类中虚函数表,将保存基类中未被重写的虚函数的地址。
(6)如果派生类中定义了新的虚方法,则该虚函数的地址也将被添加到派生类虚函数表中。

调用虚函数

程序将查看存储在对象中的虚函数表地址,转向相应的虚函数表,使用类声明中定义的第几个虚函数,程序就使用数组的第几个函数地址,并执行该函数。

4. 析构函数可以为虚函数吗 ?

主要是基类指针指向子类对象的情况下,在基类销毁时,只调用基类的析构函数而不调用子类的析构函数,从而导致内存泄漏,所以需要虚函数机制来帮助系统' 识别 '需要释放资源。

5.构造函数为什么不能是虚函数?

虚函数采用的是虚调用的办法, 是一种可以在只知道部分信息的情况下正常工作的机制,只知道接口而不知道准确的对象类型的函数 。

但是,要创建一个类对象,必须要让构造函数知道对象的准确类型,所以构造函数不能为虚!

6.内存管理中的堆、栈 的区别 ?

栈:由系统自动分配,速度较快。但程序员是无法控制的。

堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。

7. vector 释放的理解 ?

    (1)直接声明的vector容器是一个普通变量,相当于一个未知大小的动态数组,不需要手动释放,超出作用于范围时会自动回收。

    (2)如果是vector *vec = new vector<>( )这种方法动态创建的vector,则需要delete vector;

    (3)如果vector里面存放的是元素而不是指针,这些元素会随vector的释放而自动释放; 

    (4)如果vector里面存放的是指针,并且指向自己new或malloc的数据,那么需要一个一个手动释放指针。也就是上面代码的情况。

相关文章

  • 面试常见问题 - 目录

    面试常见问题01 - C++相关(施工ing) 面试常见问题02 - 算法与数据结构(施工ing) 面试常见问题0...

  • C++基础面试

    面试中的C++常见问题 1.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”? 答:首...

  • C++面试常见问题整理汇总

    这篇文章汇总了C++基本语法、面向对象各种概念与易错点,总结讲述了C++面试常见问题。分享给大家供大家参考,具体如...

  • C++ 常见问题

    1. 什么是多态 ?其有哪些实现方式,不同实现方式有河区别 ? 多态是:不同类的对象收到相同的消息时,得到不同的结...

  • C++常见问题

    作者:守望者1028 链接:https://www.nowcoder.com/discuss/55353?type...

  • go语言陷阱之十一:数组作为函数参数

    这是C/C++里面的常见问题了,数组作为函数参数时是传值还是传引用, 代码example: 本意是想更新数组x,但...

  • C++内存常见问题

    C++ 里可能出现的内存问题大致有这么几个方面: 缓冲区溢出(buffer overrun)。 空悬指针/野指针。...

  • C/C++面试常见问题

    1.继承,多态 2.虚函数 3.lambda表达式 Lambda 的语法形式如下: 函数对象参数取值: 空。没有任...

  • C++转Java常见问题

    今天和同事聊天,聊到传统C++开发转Java Web开发的一些问题,他提到的大多数问题,在我刚转Java web开...

  • T区常见问题和T区常见问题解决方法,七老总经销小赖

    T区常见问题和T区常见问题解决方法 T区常见问题和T区常见问题解决方法 T区常见问题和T区常见问题解决方法 T区常...

网友评论

      本文标题:C++ 常见问题

      本文链接:https://www.haomeiwen.com/subject/xzjybktx.html