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"<

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

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

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

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

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

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

你可能感兴趣的:(c++多态 父类指针指向子类对象思考)