多态(2)纯虚函数与重载、重写(覆盖)、重定义(隐藏)

本文探讨了C++中的纯虚函数及其在多态中的作用,包括抽象类的概念。此外,还详细解释了函数重载、重写(覆盖)和重定义的区别,强调了它们在实现多态性中的不同角色。重载主要通过函数名相同但参数列表不同的方式实现,而重写则涉及子类覆盖基类的虚函数。最后,文章指出函数隐藏是派生类中同名但参数不同的函数对基类函数的影响。
摘要由CSDN通过智能技术生成

纯虚函数

纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。纯虚函数的存在是为了更方便使用多态特性。它的一般格式如下:

class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
};
 在成员函数的形参列表后面写上=0, 则成员函数为纯虚函数。纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。包含纯虚函数的类叫做抽象类( 也叫接口类) , 抽象类不能实例化出对象。 纯虚函数在派生类中重新定义以后, 派生类才能实例化出对 象。
复制代码
 1 class A {
 2 public:
 3     A();
 4     virtual ~A();
 5     void f1();
 6     virtual void f2(); 7 virtual void f3()=0; 8 }; 9 class B:public A{ 10 public: 11  B(); 12 virtual ~B(); 13 void f1(); 14 virtual void f2(); 15 virtual void f3(); 16 }; 17 int main(int argc,char * argv[]) { 18 A *m_j = new B(); 19 m_j -> f1(); 20 m_j -> f2(); 21 m_j -> f3(); 22 delete m_j; 23 return 0; 24 }
复制代码
f1()是一个隐藏,调用m_j->f1();会去调用A类中的f1(),它是在我们写好代码的时候就会定好的。也就是根据它是由A类定义的,这样就调用这个类的函数。f2()是重写(覆盖)调用m_j->f2();会调用m_j中到底保存的对象中,对应的这个函数。这是由于new的B对象(调用派生类的f2())f3()与f2()一样,只是在基类中不需要写函数实现。
复制代码
1 class Person
2 {
3    vi rtual voi d Di splay () = 0; // 纯虚函数
4    protected :
5    stri ng _name ; // 姓名
6 } ;
7 class Student : publi c Person
8 { } ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值