隐藏main()函数,使用一个全局对象的成员函数替代main()函数的功能
来源:互联网 发布:如何学java高级工程师 编辑:程序博客网 时间:2024/06/05 00:38
前言
此文在《程序入口函数(main或WinMain)放置在.h文件中,你试过吗?》基础上进一步尝试,在代码中隐藏main()函数,采用一个全局对象的成员函数替代main()函数的功能。实现使用了C++语言。
实现
/////////////////////////////////////////////////////////// file : MyMain.h// function : 为了实现面向对象的特性,采用CMyMain这个基本// 类来构建一个简单的架构实现讲main()函数隐藏// 在这个头文件中。使用时只需从CMyMain派生一个// 子类,并实现 virtual MyMain()函数。////////////////////////////////////////////////////////// #pragma onceclass 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
1 0
- 隐藏main()函数,使用一个全局对象的成员函数替代main()函数的功能
- main函数参数的使用
- 使用main函数的参数
- 全局对象的构造函数会在main函数之前执行?
- main函数的参数
- main函数的参数
- Main 函数的参数
- main()函数的参数
- main函数的参数
- main函数的参数
- main函数的参数
- main函数的规范
- main函数的参数
- main函数的参数
- main函数的参数
- main函数的参数
- main函数的参数
- main函数的参数
- String s = new String("xyz")创建了几个对象
- usaco training 4.2.4 Cowcycles 题解
- 函数参数的压栈过程
- C/C++堆、栈及静态数据区详解
- getElementByClassName
- 隐藏main()函数,使用一个全局对象的成员函数替代main()函数的功能
- 处理表达式中的空值:nvl()举例
- PB动态SQL语句
- 在线教育的优势强调实时直播、实时互动
- C++中的强制类型转换
- 面向对象
- ZJU3723 状压DP
- Java知识总结-IO字节流
- 关于DIV内文字垂直居中的写法