idkwrfys 2019-05-05 20:07 采纳率: 0%
浏览 558

c++大一新生关于父类指针或引用的问题

父类的指针和引用指向子类空间时,只能通过该指针或引用访问子类空间中继承父类的数据或函数,那是不是:
1、用该指针申请一个子类的动态内存时,可以在后面加上形参表(调用子类构造函数)
2、我虽然不能直接用这个指针或引用来访问子类新增的数据或函数,但我可以用指针或引用来访问继承下来的某个虚函数,在子类对这个函数的实现里,我再对子类的自己的数据和函数进行操作,同理,我也可以输出,返回值

还有一个问题,如果上面是对的话,就说明子类空间的构造还是独立的,只不过父类指针和引用没有访问其他内容的权限罢了?那为什么用父类指针建立的子类动态内存在析构时只会析构继承下来的部分?自己的数据也构造了为什么不析构了?

  • 写回答

2条回答

  • 基本没有毒性 2019-05-05 21:42
    关注

    1、c++一般用new动态申请内存,申请的空间大小只和new后面的类型有关
    例如,父类是Parent,子类是Child
    Parent * p1=(Parent * )new Child();
    调用的当然是Child的构造函数,指针可以强制转化成任意类型,比如转成void*方便参数传递,用的时候再转回来

    2、对的,虚函数的主要作用就是这个

    内存空间的大小申请完就固定了,和指针的类型没有关系,父类指针没办法访问子类的变量,但这些变量的内存空间是分配好的

    如果析构函数不是虚函数,delete p1;就会调用Parent的析构函数,因为delete只看后面指针的类型,不管实际内存空间的大小,这样就会造成内存泄漏,要解决这个问题最好把析构函数写成虚函数

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)