您的位置:首页 > 其它

虚函数

2016-08-09 15:33 225 查看
C++支持编译时多态和运行时多态,运算符重载和函数重载就是编译时多态,而派生类和虚函数实现运行时多态。

 

只有当基类指针指向子类对象时,才显现多态性,根据指针指向的不同,调用不同对象的虚函数。

 

虚函数与重载函数的区别:

    1)重载函数之间必须在参数的类型或者数量上加以区分,而重新定义的虚函数在参数的类型和数量上必须与原型相同;

    2)在定义虚函数的类中,虚函数必须声明为类的成员而不能是友元,可以被声明为其他类的友元;析构函数可以是虚函数,构造函数不行。

[b]析构函数为什么是虚函数:[/b]

(基类的析构函数不是虚函数,在main函数中用继承类的指针去操作继承类的成员,释放指针P的过程是:先释放继承类的资源,再释放基类资源. )

用基类的指针去操作继承类的成员,释放指针P的时候:只是释放了基类的资源,而没有调用继承类的析构函数.造成内存泄漏

纯虚函数及其作用:

    纯虚函数是指在基类中声明但是没有定义的虚函数:virtual type func(param list) = 0;

    把虚函数声明为纯虚函数可以强制在派生类中重新定义虚函数,否则编译器会报错。

如果不需要基类对派生类及对象进行操作,则不能定义虚函数,因为这样会增加内存开销.当类里面有定义虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间.所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: