您的位置:首页 > 编程语言 > C语言/C++

第三章多态

2013-06-19 20:52 357 查看
虚函数关键字 virtual 用于在类中说明虚函数。我们来看一个例子:
using namespace std;
class Point
{

public:
//可以将下面两行代码的注释解开看看差别就能明白虚函数的作用
//virtual void show()
//void show()
virtual void show()
{
cout<<"Point"<<endl;
}
};
class Square:public Point
{

public:
void show()
{
cout<<"Square"<<endl;
}
};
//程序分析:
//我们将一个派生类的地址即&sqObj赋值给基类的指针即Point* pObj。当基类的指针指向派生类的对象时,基类的指针只能访问派生类对象从基类继承下来的成员,所以当执行pObj->show();执行的是Point类的show()方法。
//如何解决这个问题,使用虚函数  用关键字virtual
//简单说就是不加virtual关键字调用的是Point类的show()方法,加了关键字之后调用的是Square类的show()方法
int main(int argc, const char * argv[])
{
Point* pObj;
Square sqObj;
pObj = &sqObj;
pObj->show();
return 0;
}
代码下载: http://pan.baidu.com/share/link?shareid=552980530&uk=3189484501纯虚函数与抽象类
using namespace std;
//在纯虚函数中,不能提供出函数的具体实现,而是需要在派生类中再加以实现。
//一个类中可以有多个纯虚函数,包含纯虚函数的类称为抽象类。一个抽象类只能作为基类来派生新类,而不能说明抽象累的对象。
//简单说抽象类只能用来继承
class A
{
public:
//下面就是一个纯虚函数
virtual void Show() = 0;
};
class B:public A
{

public:
void Show()
{
cout<<"BBB"<<endl;
}
};
int main(int argc, const char * argv[])
{
B bn;
bn.Show();
return 0;
}
代码下载: http://pan.baidu.com/share/link?shareid=837517146&uk=3189484501虚析构函数
using namespace std;
//在C++中,构造函数不能被声明为虚函数,但是析构函数可以被声明为虚函数。只要基类的析构函数被声明为虚函数了,则它的派生类的析构函数,无论是否使用了virtual,都将自动被说明为虚函数。
//当使用delete运算符和析构函数一起使用时,delete一个对象,则delete隐含对析构函数的调用,如果析构函数不是虚函数,则子类的对象的析构函数将不会被调用自动调用。
//就是用delete会调用析构函数,如果基类这里即(类A)析构函数如果不是虚函数的话,派生类即(B类)就不会被调用。
class A
{

public:
A()
{
cout<<"A构造函数"<<endl;
}
virtual ~A()
{
cout<<"A析构函数"<<endl;
}
};
class B: public A
{

public:
B()
{
cout<<"B构造函数"<<endl;
}
~B()
{
cout<<"B析构函数"<<endl;
}
};
int main(int argc, const char * argv[])
{
//多态的特性  基类的指针可以指向派生类
A* pb = new B();
delete  pb;
return 0;
}
代码下载: http://pan.baidu.com/share/link?shareid=1038301432&uk=3189484501

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息