您的位置:首页 > 其它

多态与虚函数的使用

2016-03-28 18:47 411 查看
注意:本文中提到的所有方法都指的是同名,同返回类型,同参数类型的方法

多态:同一方法可以处理多种调用该方法的对象(即一个接口,多种实现)

多态的实现的前提:

1.多态得存在于继承体系中

class base
{
public:
void show()
{
cout<<"this is base show!"<<endl;
}
};
class D : public base    //继承关系
{
public:
void show()
{
cout<<"this is D show!"<<endl;
}
};

void main()
{
D d;
base *p = &d;  //p只能指向父类的函数和数据
p->show();  //此时show是父类中的show函数
}


2.多态的实现必须存在虚拟(virtual)关键字

若该方法在类外实现,则不用加关键字virtual

例如:

class base
{
public:
virtual void show()    //加入virtual关键字使得子类虚拟继承父类,但实际上子类并不能调用此方法
{
cout<<"this is base show!"<<endl;
}
};

class D : public base     //子类D继承父类base
{
void show()
{
cout<<"this is D show!"<<endl;
}
};
void main()
{
D d;
base *p = &d;
p->show();   //此时show调用的是D中的show方法
}


3.多态必须通过父类的引用或指针来实现

class base
{
public:
void show()
{
cout<<"this is base show()!"<<endl;
}
};

class D : public base
{
public:
void show()
{
cout<<"this is D show()!"<<endl;
}
};

void main()
{
D d;
base *p = &d;    //通过指针实现多态
p->show();

base &q = d;
q.show();       //通过引用实现多态
}


虚函数的定义格式:

virtual 返回类型 函数名(参数列表)

注意:

1.virtual仅用于类定义中,若在类外定义虚函数不可以加关键字virtual

class base
{
public:
virtual void show();  //虚函数的声明
};
void base :: show()    //虚函数的定义(在类外定义无需加virtual关键字)
{
cout<<"this is base show()!"<<endl;
}


>2.当某个类的一个类成员函数为虚函数,则由该类派生出来的所有类中,该函数始终保持虚函数的特征


class base
{
public:
virtual void show()
{
cout<<"this is base show()"<<endl;
}
};
class D : public base
{
public:
void show()
{
cout<<"this is D show()!"<<endl;
}
};
class C : public D
{
public:
void show()
{
cout<<"this is C show()!"<<endl;
}
}

void main()
{
C c;
D *pd = &c;
//因为D是base的派生类,base中的show是虚函数所以D中的也保持虚函数的特征
pd->show();    //此时调用的是C中的show方法
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: