关于构造函数初始化
来源:互联网 发布:淘宝介入多久处理 编辑:程序博客网 时间: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!
比如在头文件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!
- _xiao
- (小小)
- 等 级:
紧紧给定义的变量分配资源吗,那么定义的函数呢?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你这句话好像是问系统都给你的类分配了什么资源,是的,系统只给类的变量分配新的资源,而一个类的所有实例的函数都是共用同一段内存空间(除了虚函数),只是调用函数时传入的变量不同罢了,运行时结果又存回各自实例的变量中。这些在《深入浅出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。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你这句话好像是问系统都给你的类分配了什么资源,是的,系统只给类的变量分配新的资源,而一个类的所有实例的函数都是共用同一段内存空间(除了虚函数),只是调用函数时传入的变量不同罢了,运行时结果又存回各自实例的变量中。这些在《深入浅出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。
- 关于构造函数初始化
- 关于初始化构造函数列表
- 关于构造函数的初始化
- 关于静态初始化块和构造函数
- 关于Javascript构造函数,类初始化实例
- 关于在构造函数初始化列表
- 构造函数+初始化函数
- 关于cpp构造函数当中使用memset初始化的陷阱
- 关于cpp构造函数当中使用memset初始化的陷阱
- C#关于构造函数初始化器的使用
- 关于cpp构造函数当中使用memset初始化的陷阱
- 关于静态代码块,初始化块,与构造函数
- 构造函数初始化器
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数的初始化
- error C3163: “_vsnprintf”: 属性与以前的声明不一致
- 几个秒之间的对应关系
- html中method get与post 的区别
- 浏览器的渲染解析相关资源
- makefile双冒号规则
- 关于构造函数初始化
- log buffer —— log file sequential read、log file single write
- PCB 布板参数
- Asp.net常用的51个代码(非常实用)
- 关于NSString的retainCount的各种结果原因
- enter键提交后续
- Hibernate Session缓存概述
- xmlhttp.open中的url
- js 防止退格键