#include <iostream> using namespace std; int inc = 0; string tab() { string t; t.reserve(inc+1); for(int i = 0 ; i < inc ; ++i) { t.push_back('\t'); } return t; } class base{ public: base(void){ inc++; cout<<tab()<<"Base::ctor()"<<endl; cout<<tab()<<"I am a "<<typeid(this).name()<<endl; vfunc(); func(); inc--; } ~base(void){ inc++; cout<<tab()<<"Base::~ctor()"<<endl; inc--; } base(double d) { inc++; cout<<tab()<<"Base::ctor( "<<d<<" )"<<endl; cout<<tab()<<"I am a "<<typeid(this).name()<<endl; vfunc(); func(); inc--; } base(int a){ inc++; cout<<tab()<<"Base::ctor( "<<a<<" )"<<endl; cout<<tab()<<"I am a "<<typeid(this).name()<<endl; vfunc(); func(); inc--; } virtual void vfunc(void){ inc++; cout<<tab()<<"Base::Virtual function()"<<endl; inc--; } void func(void){ inc++; cout<<tab()<<"Base::function()"<<endl; inc--; } void call(void){ inc++; cout<<tab()<<"Base::call()"<<endl; vfunc(); func(); inc--; } }; class child : public base{ public: child(void){ inc++; cout<<tab()<<"Child::ctor()"<<endl; cout<<tab()<<"I am a "<<typeid(this).name()<<endl; vfunc(); func(); inc--; } ~child(void){ inc++; cout<<tab()<<"Child::~ctor()"<<endl; inc--; } child(double d) { inc++; cout<<tab()<<"Child::ctor( "<<d<<" )"<<endl; cout<<tab()<<"I am a "<<typeid(this).name()<<endl; vfunc(); func(); inc--; } child(int a) : base( a ) { inc++; cout<<tab()<<"Child::ctor( "<<a<<" )"<<endl; cout<<tab()<<"I am a "<<typeid(this).name()<<endl; vfunc(); func(); inc--; } virtual void vfunc(void){ inc++; cout<<tab()<<"Child::Virtual function()"<<endl; inc--; } void func(void){ inc++; cout<<tab()<<"Child::function()"<<endl; inc--; } }; int main(void) { cout<<tab()<<"Before create b"<<endl; base b; cout<<tab()<<"After create b"<<endl; b.vfunc(); b.func(); b.call(); cout<<"-----------------"<<endl; cout<<tab()<<"Before create c"<<endl; child c; cout<<tab()<<"After create c"<<endl; c.vfunc(); c.func(); c.call(); cout<<"-----------------"<<endl; cout<<tab()<<"Before create c1"<<endl; child c1(1); cout<<tab()<<"After create c1"<<endl; c1.vfunc(); c1.func(); c1.call(); cout<<"-----------------"<<endl; cout<<tab()<<"Before create c2"<<endl; child c2(1.1); cout<<tab()<<"After create c2"<<endl; c2.call(); }
运行结果:Before create b Base::ctor() I am a P4base Base::Virtual function() Base::function() After create b Base::Virtual function() Base::function() Base::call() Base::Virtual function() Base::function() ----------------- Before create c Base::ctor() I am a P4base Base::Virtual function() Base::function() Child::ctor() I am a P5child Child::Virtual function() Child::function() After create c Child::Virtual function() Child::function() Base::call() Child::Virtual function() Base::function() ----------------- Before create c1 Base::ctor( 1 ) I am a P4base Base::Virtual function() Base::function() Child::ctor( 1 ) I am a P5child Child::Virtual function() Child::function() After create c1 Child::Virtual function() Child::function() Base::call() Child::Virtual function() Base::function() ----------------- Before create c2 Base::ctor() I am a P4base Base::Virtual function() Base::function() Child::ctor( 1.1 ) I am a P5child Child::Virtual function() Child::function() After create c2 Base::call() Child::Virtual function() Base::function() Child::~ctor() Base::~ctor() Child::~ctor() Base::~ctor() Child::~ctor() Base::~ctor() Base::~ctor()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构