码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 基础问题

时间:2014-05-21 20:27:09      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:c   java   ext   a   int   文件   

1. 虚函数

虚函数是在某个基类声明为virtual并在一个或多个派生类中重新定义的成员函数。虚函数是C++多态的基础,通过指向类的指针或引用调用,调用的方式是动态联编,到运行时才确定

调用的是该虚函数的哪一个实现。非虚函数是静态联编,在编译时刻系统就能根据指针类型确定调用的函数。

虚函数一般会有一个默认实现,还有一种函数叫做纯虚函数,纯虚函数可以只声明不定义,带有纯虚函数的类不能实例化,相当于JAVA中的接口。

2. 虚函数的实现

一旦某个类中含有虚函数,编译器会在该类的实例中插入一个指针,指向虚函数表。虚函数表的作用就是保存自己类中虚函数的地址,我们可以将虚函数表看出一个数组,数组中的每一个元素存放的是虚函数的地址,一个虚函数可能会有多种实现,虚函数表中记录的是继承序列中,最接近该子类的那个。被重写的虚函数会在虚函数表中得到更新。

假如某个子类有n个父类,那么他就有n个虚函数表。

3. 虚继承

c++允许多重继承,但多重继承可能会出现菱形继承。菱形继承的问题在于子类调用某个成员变量时会出现歧义。为了解决这个问题,c++基础虚继承的概念,即虚基类的实例只在子类中保存一个实体。这个实体有虚基类的虚函数表和变量,放在子类实例最下面的位置。

4. static, const, extern 的特性

static 的一个特性是隐藏,static修饰的函数或变量在其他文件是不可见的。

static修饰的成员变量和成员函数属于整个类,而独立于类的实例。对于每一个静态成员只存储一份供所有类的实例使用。

const 修饰的变量,默认是隐藏,可通过 extern修饰使得全局可见。编译器通常不为普通 const 常量分配存储空间,而是将他们保持在符号表中,这使它成为编译期间的一个常量,存储不需要内存操作,所以效率比较高。

 

5. malloc free, new delete 的异同

都可以分配,回收空间

new是类型安全的, int *p = new float[2] 能检测出错误。

new 调用构造函数, delete 调用析构函数

malloc 返回指向 void* 类型, 一般需要类型转换

malloc, free, new delete 一般成对使用

 

C++ 基础问题,布布扣,bubuko.com

C++ 基础问题

标签:c   java   ext   a   int   文件   

原文地址:http://www.cnblogs.com/zhouzhuo/p/3739679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!