对构造函数的一点点质疑——存在即为了赋值?
看书知道编写类时,还要给类写一个构造函数,书上说:为了给成员变量初始化。除了静态变量和全局变量之外,其他成员变量在调用类时都需要初始化——给其赋值。
我很好奇,
1 为什么我在内存空间已经开辟该成员变量的空间,尽管其值是个随机数,只要其不溢出,或者威胁其他内存空间,它应该就是安全的。既然开辟了空间,为什么要给它一个具体的值呢?这样不是很“累”吗?
2 当我需要使用某个成员变量时,我间接给其赋值,需要的时候再赋值不是更好吗?
由于对构造函数理解不深,求高手指教
[解决办法]
构造函数确实并不一定需要初始化,前提是其值不存在二义性冲突,因此简单类、接口类是不需要构造函数的,如:
- C/C++ code
class T{int i;public:set(int N){i=N;}out(){cout<<i<<endl;}};class Inc{public:virtual int App(int n,char* Msg);virtual int Set(...);virtual int Run();};
[解决办法]
可以从类在内存中的分配来理解构造函数之于类的意义
内存区可以分为:1 代码区
2 栈
3 堆
4 全局静态常量区(大概是这个意思)
在类的定义过程中,我的意思是说没有在main函数里使用或者间接使用类的话,类之存在于代码区。类相对于局部变量是有区别的,在声明类的成员变量如:int class;的过程中是不会开辟内存空间的。楼主之所以困惑应该就在于此吧。
构造函数本身意义首先是为了在堆中分配内存空间,构造对象。而不单纯是为了赋值。最能说明这点就是构造函数中有个叫 带参数的构造函数。其本身就没有为成员赋值,只是将形参传递给了成员变量;默认构造函数亦是如此。
明白了类的定义不是分配空间和初始化也就明白了构造函数存在的意义
多看书,构造函数——构造类成员,这些问题其实都可以迎刃而解了
对类的理解 只要紧密结合内存空间的分配来理解,很多问题都会迎刃而解的。