为什么不实例化子类对象?多此一举?
既然子类公有继承了父类,那就可以条用父类的成员函数,那为什么在实例化的时候不直接实例化子类对象,例如:Circle *cir=new Circle(3,5,40),而是要实例化成父类对象,反而造成了麻烦
既然子类公有继承了父类,那就可以条用父类的成员函数,那为什么在实例化的时候不直接实例化子类对象,例如:Circle *cir=new Circle(3,5,40),而是要实例化成父类对象,反而造成了麻烦
2016-09-05
视频中已经实例化了:
(1)Circle *cir=new Circle(3,5,40);Shape *shape1 = cir;
(2)Shape *shape1 = new Circle(3,5,4.0);
之间的区别只是子类对象有没有子类指针指向;题主(1)应该是想说子类对象有了子类指针指向的话,就可以利用删除子类指针来调用子类析构函数了,所以第二种做法非要再加上virtual虚析构函数,就是多此一举;
其实,在使用的时候,我们用父类指针指向子类对象,什么时候结束使用该指针,如果使用(1),则要delete cir;可是我们已经写代码不知道写到哪里去了,当父类指针shape1用完后,就地delete shape1;是比较实在的,不然就要再翻山越岭去找子类指针;或者万一我们在父类指针shape1没有使用完之前,不小心delete cir;那么程序还要调用shape1,就会出现意想不到的问题;
举报