C++ 类的构造函数
2015-12-08 23:30
337 查看
类的构造函数并没有想象中的那么好用,也没有想象中的不好用
先说好处:
- 可以提醒程序员初始化必要的成员变量
- 构造虚函数表(虚函数表中的指针是不靠谱的,C++编译器做了一定的转化),这样可以实现多态
- 私有构造函数提供了一个新特性,只有类自己能够生成自己的对象,基于此,我们可以实现单例模式,但是还不够,必须有静态成员函数,静态成员函数有自己独立的内存地址,可以通过类域直接进行访问
再说坏处:
- 初始化的过程可能会很复杂,构造函数难以胜任,单独使用其他函数用于成员变量的初始化工作,典型的InitDialog()
- 虚函数表使得对象的行为变得不可控制,比如,我们不能使用memset来初始化一个对象,fread和fwrite函数也不能很好的控制对象,基于此,我们可以得出这样的一个结论,多态给我们提供了一些便利,但是,我们失去对内存控制的灵活性。天下没有免费的午餐!!!
从上面的分析可以知道,为什么我们最好不要用malloc为对象动态申请内存空间,而要用new来做这个事情,最重要的一个原因就是new 可以自动调用对象的构造函数。
先说好处:
- 可以提醒程序员初始化必要的成员变量
- 构造虚函数表(虚函数表中的指针是不靠谱的,C++编译器做了一定的转化),这样可以实现多态
- 私有构造函数提供了一个新特性,只有类自己能够生成自己的对象,基于此,我们可以实现单例模式,但是还不够,必须有静态成员函数,静态成员函数有自己独立的内存地址,可以通过类域直接进行访问
再说坏处:
- 初始化的过程可能会很复杂,构造函数难以胜任,单独使用其他函数用于成员变量的初始化工作,典型的InitDialog()
- 虚函数表使得对象的行为变得不可控制,比如,我们不能使用memset来初始化一个对象,fread和fwrite函数也不能很好的控制对象,基于此,我们可以得出这样的一个结论,多态给我们提供了一些便利,但是,我们失去对内存控制的灵活性。天下没有免费的午餐!!!
从上面的分析可以知道,为什么我们最好不要用malloc为对象动态申请内存空间,而要用new来做这个事情,最重要的一个原因就是new 可以自动调用对象的构造函数。
相关文章推荐
- 我们学不会的C语言的最大敌人是谁?
- c++拾遗-----开始学习c++
- C++二叉树左右孩子的交换
- 汉诺塔(Hanoi Tower)步骤输出 C++
- C语言程序设计整理(3)
- C++Primer学习:模板特例化
- C++类成员函数的重载、覆盖和隐藏区别?
- C语言VS2010环境下打开文件容易出现的问题。
- C语言成长学习题(十六)
- VC++中的通知消息
- C++ 顺序容器
- C语言中二维数组的问题
- C++多态性
- 一起talk C栗子吧(第七十二回:C语言实例--DIY date命令)
- c语言复杂数据类型
- 队列
- c++函数返回引用
- C语言学习之路(1)
- 黑马程序员——C语言——常见内存分配函数和构造类型
- C语言1——基础