C++----虚析构函数
2015-01-11 19:10
190 查看
虚函数是C++中用于实现多态的机制,主要是通过基类类型的指针指向其派生类的实例,然后通过基类的指针调用实际派生类的函数,从而实现多态。
/* 当基类指针指向派生类对象时,这种指针只能访问派生对象从基类继承而来的那些成员,不能访问子类特有的元素,除非应用强类型转换 如果使用虚函数就能使这个指向派生类对象的基类指针访问派生类中的成员函数,而不是基类中的成员函数,从而实现多态 一般应使用基类指针来调用虚函数,如果用点运算符来调用虚函数就失去了它的意义 */ #include <iostream> using namespace std; class Base { public: virtual void what_am_i(){ cout<<"I'm Base"<<endl; } virtual ~Base(){ cout<<"Base destructor"<<endl; } }; class Derived:public Base{ public: virtual void what_am_i(){ cout<<"I'm Derived"<<endl; } virtual ~Derived(){ cout<<"Derived destructor"<<endl; } }; int main() { Base *b=new Base; Derived *d=new Derived; Base* array[2]; array[0]=b; array[1]=d; for(int i=0;i<2;i++) array[i]->what_am_i();//虚函数,故调用其对象类的函数 delete array[0]; delete array[1];//对array[1]:若析构函数不是虚函数,则只能调用基类的析构函数,若析构函数是虚函数,则会先调用派生类的析构函数,然后调用基类的析构函数 system("pause"); return 0; }
因此若一个类要作为基类,则其中必定声明了虚函数,否则失去了多态的意义。而一个类若作为另一个类的基类,则必须将其析构函数声明为虚函数,否则基类指针在调用析构函数时会只释放基类所用内存,而导致派生类没有被释放。
相关文章推荐
- C++中的虚析构函数
- 跟风C++主题年:从虚析构函数想到的内存基本模型
- C++虚函数的实现细节、虚析构函数 汇编解析
- C++虚析构函数
- C++继承中的虚析构函数
- c++基类不为虚析构函数的一个风险
- c++ virtual 虚析构函数 资源释放的讨论
- C++继承中构造函数、析构函数调用顺序及虚析构函数
- C++中 虚函数 虚析构函数的作用
- C++中的虚析构函数
- c++继续学习 virtual Destruct function (虚析构函数)
- 关于C++虚析构函数
- c++面向接口编程,虚函数,虚析构函数
- 关于c++虚析构函数
- C++中的虚析构函数
- C++中,什么是纯虚函数,什么是抽象类,什么是虚析构函数
- C++中的虚析构函数
- c++只在基类中用虚析构函数的原因
- C++的虚析构函数
- C++虚析构函数