网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Turbo C下的寄存器变量.
.CB生成的程序需要哪些文件.
.C语言中的面向对象(4)-面向对象.
.求从棋盘的坐下角到右上角的无环.
.C++数据结构学习:二叉树(2).
.数据结构学习(C++)之双向链表.
..
.用PcommPro开发串行通信程序.
.在C++Builer中多线程的实现.
.个简单菜单程序.
.1999年4月全国计算机等级考试二级.
.Winsock技术在远程监控中的应用.
.C++辨析系列谈(二).
.在C++语言中,关于内联函数(inlin.
.C语言常用的三种排序方法总结与探.
.C语言库函数(S类字母)-2.
.很普通很普通的猜数字游戏.
.串的实现实验.
.C、C++程序的优化之路.
.经典c程序100例==21--30.

小心C++编译器给我们带来的麻烦

发表日期:2008-3-8


友情推荐:王朝末代 C++真的衰落了?

  有下面一个简单的类:

class ClxTest
{
 public:
  ClxTest(int iSize = 13) { pszStr = new char[iSize]; };
  ~ClxTest() { if(pszStr) delete pszStr; };
  lxOutput() { cout << pszStr << endl; };

 private:
  char *pszStr;
};
  现在有下面的两行代码:

ClxTest *pTest = new ClxTest();
ClxTest *pTest = new ClxTest;
  我想大家都知道,两种方法的效果都是一样的--都是声明了一个指向类ClxTest的对象的指针,而在创建对象的时候,都是调用了类的默认构造函数。

  可是大家知道下面两行代码的区别吗?

ClxTest lxTest;
ClxTest lxTest();
  假如你认为,这两行代码都是声明了一个类ClxTest的对象,在创建对象的时候也都是调用了类的默认构造函数的话,那你就大错特错了!不相信?那你可以试试下面的代码:

ClxTest lxTest();
lxTest.lxOutput();
  也许你认为上面的代码没有什么问题,可是事实是这些代码根本不能通过编译!因为C++编译器把ClxTest lxTest();这行代码当成了一个函数声明!这个函数的名字是lxTest,没有参数,返回值的类型是ClxTest!

  很令人吃惊,对吧?但是这却与C++中的一条普遍规律相符和--尽可能地解释为函数声明。

  假如说你不知道这些的话,当代码编译不通过时,你肯定会百思不得其解,也许要花好长时间也找不出错误在什么地方。当然,假如你的代码是下面的形式,就不会出现编译错误了。

ClxTest lxTest(13);
lxTest.lxOutput();
  因为,你指定了类构造函数的参数值,C++编译器不能将ClxTest lxTest(13);这行代码解释为函数声明,它就会去寻找合适的解释而去调用类的构造函数来创建对象。

  假如我们在创建类的对象时想使用构造函数的默认参数值,那么除了ClxTest lxTest;的声明方式外,还有一种声明方式ClxTest lxTest = ClxTest();,当然这有点儿画蛇添足了。
上一篇:C++箴言:绝不在构造或析构期调用虚函数 人气:635
下一篇:在CPP中调用Jscript中的函数 人气:628
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐