C++程序设计POJ》《WEEK6 多态与虚函数》《多态的实现原理》《虚函数表》
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++程序设计POJ》《WEEK6 多态与虚函数》《多态的实现原理》《虚函数表》,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1091字,纯文字阅读大概需要2分钟。
内容图文
![C++程序设计POJ》《WEEK6 多态与虚函数》《多态的实现原理》《虚函数表》](/upload/InfoBanner/zyjiaocheng/793/6a5b863a28454ec38339374061647f8e.jpg)
“多态”的关键在于通过基类指针或引用调用
一个虚函数时,编译时不确定到底调用的是基类还
是派生类的函数,运行时才确定---- 这叫“动态
联编”。“动态联编” 底是怎么实现的呢?
#include<iostream> using namespace std; class Base { public: int i; virtual void Print() { cout << "base:print"; } }; class Derived :public Base { public: int n; virtual void Print() { cout << "drived:print" << endl; } }; int main() { Derived d; cout << sizeof(Base) << "," << sizeof(Derived); while (1); return 0; } // 程序运行输出结果: 8, 12 // 为什么都多了4个字节?
多态实现的关键--- 虚函数表
每一个有虚函数的类(或有虚函数的类的派生类)
都有一个虚函数表,该类的任何对象中都放着虚函数
表的指针。虚函数表中列出了该类的虚函数地址。多
出来的4个字节就是用来放虚函数表的地址的。
#include<iostream> using namespace std; class A { public: virtual void Func() { cout << "A::FUNC" << endl; } }; class B :public A { public: virtual void Func() { cout << "B::func" << endl; } }; int main() { A a; A *pa = new B(); //64位程序指针为8字节 long long * p1 = (long long *)&a; long long * p2 = (long long *)pa; *p2 = *p1; // 更改虚函数表的内容 pa->Func(); while (1); return 0; } // B::Func // A::Func
内容总结
以上是互联网集市为您收集整理的C++程序设计POJ》《WEEK6 多态与虚函数》《多态的实现原理》《虚函数表》全部内容,希望文章能够帮你解决C++程序设计POJ》《WEEK6 多态与虚函数》《多态的实现原理》《虚函数表》所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。