前言
此文在《程序入口函数(main或WinMain)放置在.h文件中,你试过吗?》基础上进一步尝试,在代码中隐藏main()函数,采用一个全局对象的成员函数替代main()函数的功能。实现使用了C++语言。
实现
///////////////////////////////////////////////////////// // file : MyMain.h // function : 为了实现面向对象的特性,采用CMyMain这个基本 // 类来构建一个简单的架构实现讲main()函数隐藏 // 在这个头文件中。使用时只需从CMyMain派生一个 // 子类,并实现 virtual MyMain()函数。 ////////////////////////////////////////////////////////// #pragma once class CMyMain; CMyMain *_myMain; //声明一个基类的变量,初始化在CMyMain派生类CAppMain中完成(运用了多态) int main( void ); class CMyMain { public: virtual int MyMain(); CMyMain(); }; CMyMain::CMyMain() { } int CMyMain::MyMain() { std::cout << "CMyMain::MyMian" << std::endl; return 0; } //////////////////标准 main 函数////////////////// int main( void ) { //可以在此做很多初始化或特定化的代码 _myMain->MyMain(); //加入收尾工作的代码 return 0; }
/////////////////////////////////// // file : CAppMain.h // function : 使用CMyMain类的派生类来实现更多的功能扩展 /////////////////////////////////// #pragma once #include "MyMain.h" class CAppMain : public CMyMain { public: CAppMain(); int MyMain(); }; CAppMain::CAppMain() { _myMain = this; } /*将virtual MyMain的实现放到测试代码TestMain.cpp中实现 int CAppMain::MyMain() */
///////////////////////////// // file : TestMain.cpp // Operation :测试 //////////////////////////// #include <iostream> /////自定义头文件 #include "CAppMain.h" //"MyMain.h"被包含在其中 //全局对象在入口函数mian( )之前构造 CAppMain theMain; //最好用"双重锁定的单例模式"实现这个全局唯一的theMain对象 //取代标准main函数的功能 int CAppMain::MyMain() { //所有程序的控制可以转到MyMain中进行 // std::cout << "CAppMain::MyMain()" << std::endl; return 0; }
输出: CAppMain::MyMain()
参考:
1. 参考MFC的架构 -- 使用全局对象 theApp
隐藏main()函数,使用一个全局对象的成员函数替代main()函数的功能,布布扣,bubuko.com
隐藏main()函数,使用一个全局对象的成员函数替代main()函数的功能
原文:http://blog.csdn.net/qq2399431200/article/details/20000351