注册 登录
编程论坛 C++教室

C++面向对象编程:把主函数封装在类中。

gameboy70949 发布于 2013-05-14 23:02, 3246 次点击
1、对Java编程了解的同学一定清楚,main方法是“public static void main ()”这样封装在类中,由java虚拟机加载并运行。
2、对MFC编程了解的同学应该会发现在源代码中,恐怕找不到main或者winmain这些函数,据我了解,主函数是被封装在MFC类中。

我现在想面向对象的思想写一个C++程序,而且想学上面两个例子那样,把主函数main()也封装进类里面,如:

程序代码:
#include <string.h>
#include <iostream>
using namespace std;

class HelloWorld{
private:
    char str[50];
public:
    HelloWorld(char const str0[]){
        cout<<"正在执行构造函数。"<<endl;
        strcpy( str, str0 );
    }
    ~HelloWorld(){
        cout<<"正在执行析构函数。"<<endl;
    }
    void say_hello(){
        cout<<str<<endl;
    }
    int main(){
        say_hello();
        return 0;
    }
};
HelloWorld Main("Hello!!");

当然了,上面这种写法实际是行不通的。我希望能够达到把主函数封装在类中。应该如何编写我的代码呢?

[ 本帖最后由 gameboy70949 于 2013-5-14 23:04 编辑 ]
3 回复
#2
rjsp2013-05-15 08:37
1。Java之所以这么做,是因为语言设计上的缺陷。main函数是非面向对象的,而Java又“一切只能是对象”
2。主函数是被封装在MFC中,但不是封装在MFC类中。MFC之所以隐藏主函数,是因为它要在主函数中初始化很多运行时环境
3。即使你能这么做,或者即使你用的就是Java,严格来说这也不是“面向对象”,仅仅只是封装在类中而已。如果你认为这就是“面向对象”,那一切语言只要弄个class封装一下,就是“面向对象”了。
#3
天使梦魔2013-05-15 10:25
JAVA需要虚拟机,不下载虚拟机无法运行,有没有main入口都一样个人觉得,说白了就是一个比JS,ASP,PHP更高级的脚本语言.

MFC是编译器封装,而不是代码,编译后的代码会主动抛出main入口.也就是说你现在看不到它,但编译器在编译的时候会在程序头上加入入口.并且提供整套正确的运行方式执行你的代码

如果一个程序没有main它无法运行,main代表整个程序从这里开始.如果你封装了它,现在我们假设对方编译你的库,你的库有"门票"但对方没有,程序启动的时候会先启动用户方的而不是你的,因为你是被使用者.用户方没有"门票"系统不让通过.

你也可以做出封装,除非你自己去做个编译器,编译方法由你决定.
#4
gameboy709492013-05-15 12:54
哦,明白。
1