C++中类类型指针Base * ptr=new Derived是什么意思(注,Base和Derived都是类名,Derived公有继承Base类)

ptr到底是Base类指针还是Derived类指针?

仍然是Base类型的,但是指向Derived类
可以这样是因为父类(基类)Base的指针可以指向子类(派生类)的对象。new是分配空间
但是好像通过这个指针只能访问Derived中Base的部分,也就是父类的部分。(虚函数不同)
如果想要转化为DERIVED类,需要强制转换,比如用dynamic_cast<>(),
如果父类有一虚函数 比如 virtual void print(); 子类也有同名函数 virtual void print();
这样写 ptr->print(); 调用的时子类的(Derived) ,,,,多态调用

你可以多看看“虚函数”,“多态性”什么的追问

如果ptr调用的不是虚函数,而是一个基类和派生类都有的重载函数,那么此时ptr调用的应该是基类的函数是吧?

追答

刚才试了一下,是基类的函数

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-26
从本质来讲,指针只是一个地址,可以是任意类型。
但是这样不好区分,所以才给指针加上了类型。
此处ptr就是Base*,不能直接访问Derived类的成员函数,但是可以通过强制转换后访问
Derived* d = (Derived*) ptr;
相似回答