关于构造函数初始化

来源:互联网 发布:淘宝介入多久处理 编辑:程序博客网 时间:2024/05/24 06:38
 
对不起,我凭印象想当然的说 "MFC程序有无数的事情都是在构造的时候做的 ",现在想举例子才发现原来很多类的构造函数都是空的,多数事情是在InitInstance、OnCreate或InitDialog等初始化函数中专门进行的。构造函数一般来讲通常只进行变量初始化和内存的申请等,但由于这个函数是由你编写的,所以正如maoxianwang大侠说的,你可以在里面干你任何想干的事。
比如在头文件MyClass.h中你定义了一个类:
class   MyClass    
{
public:
MyClass();
virtual   ~MyClass();
int   nVal;
private:
int   len;
int   capacity;
char   *pClassContent;
};
然后在文件MyClass.cpp中你可以编写这些函数的实现:
MyClass::MyClass()
{
pClassContent=new   char[1024];
capacity=1024;
len=0;
nVal=10000;
}

MyClass::~MyClass()
{
delete   pClassContent;
}
这样在其他地方使用这个类时当用MyClass定义一个变量时
MyClass   myA;
到这句话时就会自动调用类的构造函数MyClass::MyClass(),于是以后myA中的值就有了确定的值,MyA.nVal就等于10000了,而myA.pClassContent也预先分配了1024字节的空间,这些是通常的做法。而如果你愿意,你也可以在MyClass::MyClass()里面打开文件进行读入,或创建线程,打开窗体等都可以干。

这些东西任何一本vc的书上都有,本来应该由你自己去领会,我不应该给你讲的,但因为我说错了话,怕误导你,所以还是说清楚的好。

如果你对这些已经滚瓜烂熟了,只是想了解MFC的工作过程的话,你应该去看《深入浅出MFC》,那上面讲了各种windows程序窗口生成的来龙去脉。

祝你好运!lucky!enjoy!
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • _xiao用户头像
  • _xiao
  • (小小)
  • 等 级:
#8楼 得分:0回复于:2003-08-16 11:41:43
紧紧给定义的变量分配资源吗,那么定义的函数呢?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你这句话好像是问系统都给你的类分配了什么资源,是的,系统只给类的变量分配新的资源,而一个类的所有实例的函数都是共用同一段内存空间(除了虚函数),只是调用函数时传入的变量不同罢了,运行时结果又存回各自实例的变量中。这些在《深入浅出MFC》中也有详细叙述。

假如上面的类中还有一个函数int   MyFun();
int   MyClass::MyFun()
{
return   nVal;
}
使用
MyClass   myA,myB;
myB.nVal=200;
时内存中只有一份MyFun(),两个实例MyA,MyB都使用这同一个函数,但各自的变量都是分开的,调用myA.MyFun()将返回myA.nVal,即10000,myB.MyFun()将返回myB.nVal,即200。