关于虚函数问题
因为C::f跟A::f的返回值和参数类型都一样,A::f又有virtual,所以自动带上了virtual。如果你用clang++编译的话,他会告诉你你忘记写override,不让你过。还有,*cp的类型不是A,是A\u0026amp;
■网友
这正是虚函数存在的意义——动态绑定啊基类的引用和指针会在运行时根据其绑定对象的实际类型决定调用基类还是派生类的虚函数你的基类A类定义了一个虚函数f(),那么在A的所有派生类中f()都是虚的。你用基类A的指针new了一个C类对象,该对象的实际类型是C,这个指针调用f()的时候触发了动态绑定而f2()不是虚函数,不存在动态绑定,你相当于用一个基类(A)对象调用派生类(C)成员,当然会报错。这段代码根本就是用来讲虚函数的示例嘛(⊙?⊙)
■网友
不光是指针,引用同样可以触发多态。比如C c;A\u0026amp; a = c;a.f();//应该输出c
■网友
因为cp 会在虚函数表中找到子类函数的地址然后调用
■网友
1.子类对父类中的虚函数重定义时(方法名,参数个数与类型,返回值都必须一样,否则被认为是重载),不论写不写关键字virtual,该函数都被认为是虚函数;2.父类指针指向子类对象,调用virtual方法,标准的动态绑定,所以(*cp).f()输出c;3.通过父类指针指向子类对象,该指针只能访问子类对象中的父类部分,不能访问子类新增的部分。
■网友
学习 OOP,用 C++ 太陡了,为什么不学习C# Java呢。
推荐阅读
- 江苏■江苏交控坚持问题导向、瞄准职工需求——找准“病灶”当好“产改先行官”
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- 贵州在建骨干水源工程达到465座有效解决工程性区域性缺水问题
- 四川眉山瓦屋山景区就游客投诉、停车难等问题公开道歉
- 杭州已整改城市道路无障碍环境问题12467处
- 互联网怎样解决“家政服务上门速度慢”的问题
- 中东问题|
- 中国网汽车|购车2个多月、仅行驶8000多公里 宝骏730遭遇7处问题
- |沛县深入开展教育领域突出问题专项整改
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则