#include <iostream> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ class A { public: virtual int getMile() { return getPerGallon() * getGallon(); } virtual void setGallon(int gallon) { mGallon = gallon; } virtual int getGallon() { return mGallon; } private: int mGallon; virtual int getPerGallon() { return 20; } }; class B : public A { public: virtual int getPerGallon() { return 35; } }; int main(int argc, char** argv) { B b; A a; b.setGallon(2); a.setGallon(2); std::cout << "B have ride " << b.getMile() << std::endl; std::cout << "A have ride " << a.getMile() << std::endl; /* B have ride 70 A have ride 40 */ return 0; }
虚函数不仅可以定义在public,而且可以声明在protected和private里边
而在派生类里边可以定义在任何限定里边,不一定和父类的限制符相同,比如:父类的在private里,但是子类可以定义在public里
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 当职场成战场:降职、阴谋与一场硬碰硬的抗争
· 用99元买的服务器搭一套CI/CD系统
· Excel百万数据如何快速导入?
· ShadowSql之.net sql拼写神器