小角色,大心脏

C++博客 首页 新随笔 联系 聚合 管理
  6 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

作大二《C++高级程序设计》助教已有7周,遇到很多学生提出来的问题,总的说来都属于C++基础问题。然而,由于才疏学浅,很多次被学生问懵了,为了面子,不得不私下恶补。Always try to see the half glass full!
恶补的过程中,总结了一些问题,本着交流与分享的出发点,偶会在这里不定期更新,希望对C++初学者有所帮助!也请指出偶的错误之处!
PS:下面提到的观点并非全部属于自己,很多是来自各技术论坛大牛之作,在此引用,谢过先


 

Question:编译器会自动创建那些成员函数呢?什么情况下我们不需要自己写这些函数呢?(学生问时,我说了三种,少了assignment operator)
Answer:constructor(构造函数);destructor(析构函数);copy constructor(复制构造函数);assignment operator(赋值操作符)
              以Human为例:
                     Human();//默认构造函数
                     ~Human();//析构函数
                     Human(const Human& p);//复制构造函数
                     Human & operator = (const Human & lvalue);//赋值操作符函数
               学生又问了既然编译器给我们自动创建了这些构造函数,为什么我们还要重新自己定义呢?
               晕倒,我问“构造函数的作用是什么呢?” 答曰“初始化数据成员(因为无法在类里面给成员变量赋初值)” “仅仅如此吗,如果需要实现一些功能呢,要不要在构造函数里写?回答是肯定的”。至于其他几个构造函数别有用途,另行讨论;
               学生没有示弱的意思,反问道“那什么情况下,我们不需要写这些函数呢” 
                稍稍考虑了一下,“如果没有写构造函数,编译器会自动生成一个不带参数的构造函数即默认构造函数,析构函数类似”,暂时敷衍了一下。后来又想,至于复制构造函数和赋值呢?查了一下才知道:如果我们只用基本数据类型,而没有用指针或者引用作为数据成员,此时就不需要自己写这些函数。所以一般情况下,我们通常都写上这几个构造函数!
posted on 2011-04-16 19:00 小角色 阅读(138) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理