具体代码如下:
#include<iostream>
#include<vector>
#include”d_hash.h”
#include”E:\C++STL\ftsoftds_VC++6\include\d_random.h”
using namespace std;
//整数类
class Integer
{
public:
//构造函数,初始化intValue并设置count=1
Integer(int n=0):intValue(n),count(1){}
int getInt() //返回intValue
{
return intValue;
}
int getCount() //返回计数
{
return count;
}
Integer operator++(int) //后缀形式的++运算符,count加1
{
Integer obj=*this;
(obj.count)+=1;
return obj;
}
//按intValue比较整数对象
friend bool operator<(const Integer& lhs,const Integer& rhs);
friend bool operator==(const Integer& lhs,const Integer& rhs);
//输出对象,格式为:intValue(count)
friend ostream& operator<<(ostream& ostr,const Integer& obj);
//允许hFinteger访问Integer类
friend class hFinteger;
private:
int intValue; //整数
int count; //计数
};
bool operator<(const Integer& lhs,const Integer& rhs)
{
return lhs.intValue<rhs.intValue;
}
bool operator==(const Integer& lhs,const Integer& rhs)
{
return lhs.intValue==rhs.intValue;
}
ostream& operator<<(ostream& ostr,const Integer& obj)
{
cout<<obj.intValue<<“(“<<obj.count<<“)”;
return ostr;
}
class hFinteger
{
public:
unsigned int operator()(const Integer& obj)const
{
unsigned int j;
j=obj.intValue-5;
return j;
}
};
//使用rnd模拟掷骰子的投掷
int toss(int n)
{
randomNumber rnd;
int i,x=0;
for(i=0;i<n;i++)
x=x+(rnd.random(6)+1);
return x;
}
int main()
{
suhash<Integer,hFinteger> IntHF(17);
suhash<Integer,hFinteger>::iterator iter;
pair<suhash<Integer,hFinteger>::iterator,bool> p;
int i;
for(i=0;i<20;i++)
{
int n=toss(5);
Integer Int(n);
p=IntHF.insert(Int);
if(p.second==false)
{
*(p.first)++; //不能调用Integer类的++运算符函数
}
}
iter=IntHF.begin();
for(;iter!=IntHF.end();iter++)
cout<<*iter<<endl;
//vector<int> vec;
return 0;
}
代码调试通过,但运行结果不正确。可能就是Integer类中++运算符函数不能调用,本人找不出原因,请各位老师不吝指点。
#include<iostream>
#include<vector>
#include”d_hash.h”
#include”E:\C++STL\ftsoftds_VC++6\include\d_random.h”
using namespace std;
//整数类
class Integer
{
public:
//构造函数,初始化intValue并设置count=1
Integer(int n=0):intValue(n),count(1){}
int getInt() //返回intValue
{
return intValue;
}
int getCount() //返回计数
{
return count;
}
Integer operator++(int) //后缀形式的++运算符,count加1
{
Integer obj=*this;
(obj.count)+=1;
return obj;
}
//按intValue比较整数对象
friend bool operator<(const Integer& lhs,const Integer& rhs);
friend bool operator==(const Integer& lhs,const Integer& rhs);
//输出对象,格式为:intValue(count)
friend ostream& operator<<(ostream& ostr,const Integer& obj);
//允许hFinteger访问Integer类
friend class hFinteger;
private:
int intValue; //整数
int count; //计数
};
bool operator<(const Integer& lhs,const Integer& rhs)
{
return lhs.intValue<rhs.intValue;
}
bool operator==(const Integer& lhs,const Integer& rhs)
{
return lhs.intValue==rhs.intValue;
}
ostream& operator<<(ostream& ostr,const Integer& obj)
{
cout<<obj.intValue<<“(“<<obj.count<<“)”;
return ostr;
}
class hFinteger
{
public:
unsigned int operator()(const Integer& obj)const
{
unsigned int j;
j=obj.intValue-5;
return j;
}
};
//使用rnd模拟掷骰子的投掷
int toss(int n)
{
randomNumber rnd;
int i,x=0;
for(i=0;i<n;i++)
x=x+(rnd.random(6)+1);
return x;
}
int main()
{
suhash<Integer,hFinteger> IntHF(17);
suhash<Integer,hFinteger>::iterator iter;
pair<suhash<Integer,hFinteger>::iterator,bool> p;
int i;
for(i=0;i<20;i++)
{
int n=toss(5);
Integer Int(n);
p=IntHF.insert(Int);
if(p.second==false)
{
*(p.first)++; //不能调用Integer类的++运算符函数
}
}
iter=IntHF.begin();
for(;iter!=IntHF.end();iter++)
cout<<*iter<<endl;
//vector<int> vec;
return 0;
}
代码调试通过,但运行结果不正确。可能就是Integer类中++运算符函数不能调用,本人找不出原因,请各位老师不吝指点。
解决方案
20
代码功能归根结底不是别人帮本人看或讲解或注释出来的;而是被本人静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生本人领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
提醒:再牛×的老师也无法代替学生本人领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
10
单步跟踪程序运行,观察分析原因
你给一半代码别人也没帮你调试
建议本人学会怎么调试程序
你给一半代码别人也没帮你调试
建议本人学会怎么调试程序
30
单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或在某行按F9设了断点后按F5执行停在该断点处的时候。
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或在某行按F9设了断点后按F5执行停在该断点处的时候。