频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
C/C++ 初学简单笔记 —4— 多态性 虚函数和抽象类
2014-01-15 14:24:04         来源:Evin's Blog  
收藏   我要投稿
1. 多态性

1). 函数重载和运算符重载这两种多态性,在编译时就能确定的,叫做静态连编

2). 像虚函数,根据运行时的对象不同,而显示不同的效果,叫做动态连编


2. 虚函数,若基类中有虚函数,则其析构函数也应声明为虚函数,子类的析构函数会默认成为虚析构函数

测试代码:

#include

using namespace std;


class A
{
public:
A()
{
cout<<"A"< }
virtual ~A() // 如果这里没有声明为虚函数,那么delete a, 只会释放a, 而不是释放new B的空间。
{
cout<<"A destroy "< }
};

class B:public A
{
public:
B()
{
cout<<"B"< }
~B()
{
cout<<"B destroy "< }
};

int main()
{
A *a = new B;
delete a;
return 0;
}

注:为了在撤销动态分配存间时,能得到正确的处理,必须将基类析构函数设置为虚析构函数。

在以后编程中,即使基类并不需要析构函数,也要显示地定义一个函数体为空的虚析构函数,

那么后面派生类的析构函数就都成为虚析构函数了,这是一个重要的技巧。


3. 纯虚函数

格式: virtual 类型 函数名(参数表)=0;

可见,函数体本身并没有内容,只起到了一个统一接口的作用


4. 抽象类

含有纯虚函数的类,叫做抽象类,不能实例化,不能声明抽象类的对象,

但是可以声明抽象类指针和抽象类别名。

注:子类必须实现抽象类中的同名方法(不受权限限制),当然,也可继续声明为纯虚函数


测试代码:

#include
using namespace std;

class A // 抽象类
{
public:
virtual void show()=0;
};

class B:public A
{
private:
void show() // 重写纯虚函数,不受权限的限制
{
cout<<"B show()"< }
};

int main()
{
A *a = new B;
a->show(); // 因为基类是public的,所以不受限制,到子类中寻找函数的定义
return 0;
}


点击复制链接 与好友分享!回本站首页
相关TAG标签 多态性 函数 笔记
上一篇:zoj1789The Suspects(简单并查集)
下一篇:hdu1556 Color the ball
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站