C++ 虚函数和纯虚函数总结
2014-03-09 23:08
453 查看
一 定义
虚函数: 通过虚函数基类可以使用派生类的虚函数方法. C++多态的一种.
纯虚函数: 功能同上,只是没有函数实现.
二 总结
虚函数: 如果基类中声明了有虚函数,则该类的对象以及该类派生类的对象都会有一个虚函数表,并且虚函数表位于对象所在内存的最前面.
纯虚函数: 当虚函数为类的析构函数时, 纯虚函数也必须要实现. 因为析构函数最终是要调用的.
在分析虚函数时,必须要结合基类和派生类的调用方式来分析.因为当不存在基类通过派生类对象的指针来调用虚函数时,是无法判断虚函数和非虚函数有何区别的.
下面给出一个例子:
class A
{
public:
A();
virtual ~A();
virtual void describe();
}
class B: public A
{
public:
B();
~B();
virtual void describe();
}
A *p = new B();
p->describe();
调用的是B的方法
delete p;
释放空间时,首先调用的是~B() 然后是~A(), 如果A没有定义虚析构,则调用为 ~A() 而不会调用~B();
虚函数: 通过虚函数基类可以使用派生类的虚函数方法. C++多态的一种.
纯虚函数: 功能同上,只是没有函数实现.
二 总结
虚函数: 如果基类中声明了有虚函数,则该类的对象以及该类派生类的对象都会有一个虚函数表,并且虚函数表位于对象所在内存的最前面.
纯虚函数: 当虚函数为类的析构函数时, 纯虚函数也必须要实现. 因为析构函数最终是要调用的.
在分析虚函数时,必须要结合基类和派生类的调用方式来分析.因为当不存在基类通过派生类对象的指针来调用虚函数时,是无法判断虚函数和非虚函数有何区别的.
下面给出一个例子:
class A
{
public:
A();
virtual ~A();
virtual void describe();
}
class B: public A
{
public:
B();
~B();
virtual void describe();
}
A *p = new B();
p->describe();
调用的是B的方法
delete p;
释放空间时,首先调用的是~B() 然后是~A(), 如果A没有定义虚析构,则调用为 ~A() 而不会调用~B();
相关文章推荐
- C++ 虚函数、纯虚函数、继承、虚表、多态原理相关知识点总结
- C++ 虚函数、虚函数表、纯虚函数、虚基类---之比较总结
- (总结)C++虚继承,虚基类、虚函数与纯虚函数的概念和引用(待补充)
- C++ 虚函数,纯虚函数
- C++ 虚函数 纯虚函数
- C++虚函数简单总结
- C++虚继承,虚基类、虚函数与纯虚函数的概念和引用(待补充)
- C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较
- C++ 虚函数 虚继承 纯虚函数 之 一二三
- c++学习之多态(虚函数和纯虚函数)
- C++虚函数与纯虚函数的区别
- c++基础10:继承和派生 虚函数的作用 多态性概念 纯虚函数和抽象类的概念
- C++ 虚函数和纯虚函数的区别
- C++::关于虚函数,纯虚函数
- c++中的 虚函数 纯虚函数 虚基类
- C++多态性,虚函数与纯虚函数
- C++、JAVA与C#中的多态虚函数、纯虚函数(抽象函数)
- c/c++ 基础(七) 函数覆盖,虚函数,纯虚函数对比
- c++学习之多态(虚函数和纯虚函数)
- C++虚函数和纯虚函数的作用与区别