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

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

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

c++

2个回答

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

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

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

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

一楼回答的很好,我补充一点,父类的指针指向子类的对象时,只能通过该指针访问子类中public继承父类的成员。加油吧。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问