C++中为什么要用虚函数、指针或引用才能实现多态?

本文探讨了C++中实现多态的原理,尤其是为何需要使用虚函数、指针或引用。通过实例分析,揭示了在对象赋值时虚函数表并未传递,从而解释了为什么直接赋值无法实现多态。同时,自定义赋值运算符`operator=`后,证实了对象访问成员函数不依赖虚函数表。最后指出,实现多态必须借助指针或引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学过C++的都知道,要实现C++的多态性必须要用到虚函数,并且还要使用引用或者指针,以前学习的时候书本上也是这么说,

但是书本上没有说为什么?   其实只要你认真思考过这个问题你会有三个疑问:

为什么要用虚函数?

为什么要用指针或者引用?

为什么使用派生类和基类对象之间直接赋值不能实现??

一个简单的例子:

class A
{
public:
    virtual void print()
    {cout<<"A"<<endl;}
};

class B:public A
{
public:
    void print()
    {cout<<"B"<<endl;}
};
int main()
{
   A a;
   B b;
  
   A *pa = &b;//能实现多态
   pa->print();
  
   a = b; //不能实现多态,为什么?
   a.print();

   return 0;
}

进一步的,了解C++的人都应该知道只要有虚函数的类就会有一张虚函数表,多态就是通过这张表来实现的。

所以,只要你不断探索下去,就会很快发

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值