比如有A类 还有A的公有派生类B类
怎么理解A*p=new B?????
是指向A类还是B类??
为什么p->可以访问A类和B类的对象?
C++指向类的指针
答案:6 悬赏:0
解决时间 2021-02-02 04:19
- 提问者网友:℡她的他i☆
- 2021-02-01 10:53
最佳答案
- 二级知识专家网友:陪我到地狱流浪
- 2021-02-01 11:55
很明显这声明的一个A类的指针,不过这个指针指向了B类,就是这么理解,指针本身是A类指针。
访问B类的对象没有问题,访问A类的也没有问题,因为B类由A类派生。
要访问函数的话,那么对于只有B类中存在的函数,直接访问没有问题。
那么对于B类和A类中都存在的函数会这么处理呢,那就要用到虚函数了。
如果函数在基类中时虚函数,那么用p调用函数会指向B类中的对应函数,要是没有在基类中将其定义为虚函数的话,那么无论p指针指向什么位置,函数调用都会调用基类也就是p本身所被声明的类中的函数
访问B类的对象没有问题,访问A类的也没有问题,因为B类由A类派生。
要访问函数的话,那么对于只有B类中存在的函数,直接访问没有问题。
那么对于B类和A类中都存在的函数会这么处理呢,那就要用到虚函数了。
如果函数在基类中时虚函数,那么用p调用函数会指向B类中的对应函数,要是没有在基类中将其定义为虚函数的话,那么无论p指针指向什么位置,函数调用都会调用基类也就是p本身所被声明的类中的函数
全部回答
- 1楼网友:何以畏孤独
- 2021-02-01 17:36
是指向B类
父类指针指向子类应用
p->可以访问A类和B类的对象,这就是C++中的多态
- 2楼网友:duile
- 2021-02-01 16:58
name[i]没有分配空间,如果是单个字符,要用new char分配空间,如果是字符串为其分配一定的空间用name[i]=new char [10],否则运行时会有内存访问错误,当然如果不想指定字符串大小,可以用c++库中string类
- 3楼网友:湫止没有不同
- 2021-02-01 15:24
正巧干活累了 A理解为鸟 B理解为老鹰 你当然可以说老鹰是一只鸟 A*p=new B
这个时候p的指向就不能简单的认为A,B了 你可以先理解为指向了A类,如果B中使用了virtual方法重写了func的话,p->func仍然会调用B的方法 这是通过晚绑定实现的,也是面向对象的一个特性 你应该初学cpp吧 可以等看完virtual再理解这个问题
- 4楼网友:虚伪的现实
- 2021-02-01 14:48
从内存结构来说,B从A派生,就是在A的内存结构的后面,再添加了一些B自己的内容
指针本质是内存地址
指向实例B的指针,前一段是A的内容,后面是B的内容
这也就是为什么C++允许基类指针指向派生类(其实先有这个规定,才有上面的效果)。
- 5楼网友:年轻没有失败
- 2021-02-01 13:16
A*p=new B; //p是指向B类对象的指针
C++规定,基类的指针可以指向派生类 (这是实现多态的基础)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯