看了这本书,居然很多东西都不知道,就拿结构体来说吧,本来结构体也可有有构造函数的,但书中只字未提,害得我一直以为C++中的结构体和C语言中的结构体一样只能包含数据成员,过了很久很久才发现原来也可以包含成员函数,晕死,另外象定义结构体成员变量的位域宽度这些知识更是闻所未闻,看来还是建议大学的C++教材改选《21天学通C++》这本书算了,比老谭的写得好多了,不然的话选钱能的也不错,希望人们再也不要迷恋老谭了,另外再问大家一个问题呀,struct CLS
{
int value;
CLS(int i):value(i){}
CLS(){CLS(0);}
}void main()
{
CLS s;
cout<<s.value<<endl;
}这段代码输出的为什么是负数而不是0呢,它不是明明调用了CLS(0)的嘛,哎,我不知道的东西太多了,我倒底还有哪些不知道的呀
{
int value;
CLS(int i):value(i){}
CLS(){CLS(0);}
}void main()
{
CLS s;
cout<<s.value<<endl;
}这段代码输出的为什么是负数而不是0呢,它不是明明调用了CLS(0)的嘛,哎,我不知道的东西太多了,我倒底还有哪些不知道的呀
解决方案 »
- cannot convert from 'CString' to 'const char *'
- SendMessage如何发送组合键信息
- 我最近自学VC++出现了一个问题!!!!!分不够在给!!!!在线等!!!
- 我也问一个CFileDialog的问题
- 奇怪的事情!控件标题显示为0
- 树形 的 数据结构 有现成的类可以套用么(MFC or STL)
- time存储疑问
- 我放了一个richedit在对话框上,然后程序一启动就自动退出了:(
- VS2005如何读写office2007,2003的word,excel文件?
- 请指点:我定义的struct和初始化为什么不对?
- 如何判断两个套接字连接是否来自同一个主机
- 1.5TB 大容量硬盘的用途。
CLS(){CLS(0);}
下面这个函数,调用上面的那个函数生成另一个实例并初始化,然后立即析构;
所以最终value没有初始化。
你添加一个析构函数,然后跟踪就知道了。
您在这里相当于又声明了一个CLS 的对象,而这个是局部的,它的作用域仅在CLS()内有效。而到你输出时此时的value是一个没有初始化的值。看下面的代码:
#include <iostream>
using namespace std;struct CLS
{
int value;
CLS(int i):value(i)
{
}
CLS()
{
CLS ss(0);
}
} ;void main()
{
CLS s;
cout <<s.value <<endl;
}
为了便于理解您可以参考下面的代码
#include <iostream>
using namespace std;struct CLS
{
int value;
CLS(int i):value(i)
{
}
CLS()
{
// CLS (0);
}
} ;void main()
{
CLS s;
{
CLS ss(0);
cout <<ss.value <<endl;
}
cout <<s.value <<endl;
}
你的问题如楼上所言,下一个构造函数调用上个时只是重新定义了一个对象,而原对象里的i并没有被初始化,所以为负。
{}
CLS()
{
CLS(0);//这里就调用上面的构造函数创建了一个新的CLS实例,而且是局部实例,仅仅在CLS()当前函数内有效,随着CLS()函数执行完毕就立即析构。
}
你给结构添加一个析构函数,看看this指针就可以发现this指针不同()。
自己笨就得承认要评价别人时,至少要拿出自己真的实力
LZ你永远都学不好C++
有空的话,把ISO C++ 2006的规范文档看一遍。类定义那一节,规定了C++类有三个关键字class,struct,union。struct和class的唯一区别是struct默认成员变量是公有的,union和struct的唯一区别是,union只能有一个成员变量,或多个变量共用内存。
虽然我从来没读过任何谭的书,不好评论,但是我认为你还是虚心些为好。
随便说别人烂只能暴露自己的无知和浅薄。