首先要明确一点,派生类的对象可以被当做基类对象对待,因为派生类包含基类的所有成员。反之则不成立。
因此,将基类指针指向派生类对象是安全的。此时这个基类指针只能调用基类的成员函数。
如果试图用基类指针调用派生类才具有的成员函数,编译器会报错。虚函数的出现可以解决这个问题。通过基类指针在派生类对象上调用这个虚函数,实际调用的是这个虚函数的派生类版本。
回溯到“虚析构函数”的概念,如果基类指针指向一个派生类对象,析构函数不是虚函数的话,基类指针只能调用基类的析构函数,派生类中的一些内存可能无法释放,造成内存泄露。而把析构函数定义成虚函数,那么基类指针调用的将是派生类的析构函数,然后再调用基类的析构函数。这样就解决了内存泄露的问题。
//一个follow up question,如果把派生类指针指向基类对象会发生什么?此时编译会报错,需要进行显式的强制类型转换,把基类对象转换成派生类对象。
标签:调用,函数,对象,基类,派生类,经常出现,指针 来源: https://www.cnblogs.com/conanpeng/p/12796795.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。