探究为什么Object类型的成员变量最好声明为指针呢?


前言

探究为什么Object类型的成员变量最好声明为指针呢?


假如成员变量不声明为指针,会发生什么情况?

第一步:准备

  1. 准备两个类,一个基类Base,和一个派生类A,并在基类中定义一个成员函数,派生类A重写它。
  2. 准备一个main函数,通过多态方法调用这个函数
class Base{
public:
     Base(){};
     virtual ~Base(){};
    
    virtual void call(){
       cout << "Base call ......."<<endl;
     }
}
class A: public Base
{
public:
     A(){};
     ~A(){};
    
     void call(){
       cout << "Acall ......."<<endl;
     }
}

第二步:测试

int main(){
   //test1
   Base a1 = (Base)A;
   a1.call();
   //test2
   Base* a2 = new A();
   a2.call();
   return 0;
}

第三步:测试结果

在这里插入图片描述

分析与总结

通过上面的结果可以发现,test1方式调不到自己重写的方法,test2方式可以调到,这是因为,test1是静态绑定,test2是动态绑定。动态绑定的前提有3个:

  • 对象必须是指针类型
  • 调用的函数是虚函数
  • 向上转型(即基类指针指向子类对象)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值