c++多态 父类指针指向子类对象思考

//oop.h
class A{
public:
    virtual void l(){fun();}
    void fun();
public:
    int a;
};
class B:public A{
    virtual void l(){fun1();}
    void fun1(){std::cout<<"B"<<std::endl;}

public:
    int m;
};

void A::fun() {
    std::cout<<"a"<<std::endl;
}

可以看出A为基类B为子类

//main.cpp
void main{
A* p=new B;//很正常的父类指针指向子类。
}

父类的指针指向子类B的对象,所以不能访问B对象中不是从A继承下来的成员。比如

p->m//不行的
p->a//可行

但是父类指针可以调用虚函数实现c++多态,虚函数的实现是通过vptr 、vtal实现的。但是在子类虚函数的定义中确可以调用子类的任何成员。我是这么认为的父类的指针指向子类对象时候在内存上已经初始化了子类对象所有成员的值,但是应为p是父类指针只能访问关于子类继承与父类的成员。当虚函数调用时,我感觉父类指针转换成子类指针,所以可以访问内存中子类对象的其它成员。这只是我的猜想

还有子类指针不能指向父类对象 (不知道为啥 反正就是不能)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值