摘要:
1、什么是虚方法? 考虑Animal* pa = new Dog(); pa表面类型是Animal,实际类型是Dog。可以理解为,pa说,我指向Animal,说法是对的。但是不具体,实际上,pa指向Dog。pa->Say()是虚方法,在编译期,编译器只知道pa 的表面类型,不知道该调用Animal 的Say方法还是Dog 的Say方法,所以才叫做“虚方法”。只有在运行期,才根据pa 的真实类型,确定调用哪个方法。这就是虚方法。2、为什么需要虚方法?它解决了什么问题? 简单说,就是为了面向接口编程,库的提供者暴露接口,隐藏实现。库的使用者不需要知道内部的实现细节。3、它是如何解决的? 虚方 阅读全文
posted @ 2013-12-18 20:23
Andy Niu
阅读(537)
评论(0)
推荐(0)
摘要:
1、思考,不同类型的指针,到底有什么区别? 指向Animal的指针和指向Dog的指针,到底有什么区别?首先,指针的表示方法相同,指针的内容相同,都是一个int,表示地址。区别只是指向对象的类型不同(好像是废话)。这有什么意义呢? 这其实是告诉了编译器如何解释这个地址中的内存内容以及大小。也就是说,对于指向Animal 的指针,编译器把指向内容当作一个Animal,对于指向Dog 指针,编译器把指向的内容当作Dog。2、那么,问题来了,Animal* pa = new Dog(),是怎么做到运行期多态的呢? pa的表面类型是Animal,真实类型是Dog,编译器在编译时只知道pa的表面类型,.. 阅读全文
posted @ 2013-12-18 18:45
Andy Niu
阅读(1637)
评论(0)
推荐(1)
浙公网安备 33010602011771号