注册 登录
编程论坛 C++教室

输出的意外结果

flyingzc 发布于 2010-04-01 13:12, 474 次点击
#include<iostream>
using namespace std;
class a
{
public:
    a();
    a(int);
    a(const a&);
    ~a(){}
    void SetRadius(int);
    int GetRadius()const{return *itsRadius;}
    const a&operator++();
    const a operator++(int);
    a&operator=(const a&);
private:
    int *itsRadius;
};
a::a()
{
    itsRadius=new int(6);
}
a::a(int radius)
{
    itsRadius=new int(radius);
}
a::a(const a&rsh)
{
    int val=rsh.GetRadius();
    itsRadius=new int(val);
}
a & a::operator =(const a&rsh)
{
    if(this==&rsh)
        return *this;
    *itsRadius=rsh.GetRadius();
    return *this;
}
const a &a::operator ++()
{
    ++(itsRadius);
    return *this;
}
const a a::operator ++(int)
{
    a temp(*this);
    ++(itsRadius);
    return temp;
}
int main()
{
    a one,two(8);
    one++;
    ++two;
    cout<<"one"<<one.GetRadius()<<endl;
    cout<<"two"<<two.GetRadius()<<endl;
    one=two;
    cout<<"one"<<one.GetRadius()<<endl;
    cout<<"two"<<two.GetRadius()<<endl;
    return 0;
}
4 回复
#2
yyblackyy2010-04-01 13:37
const a &a::operator ++()
{
    ++(itsRadius);//改成 ++(*itsRadius);
    return *this;
}
const a a::operator ++(int)
{
    a temp(*this);
    ++(itsRadius);  );//改成 ++(*itsRadius);

    return temp;
}
#3
apull2010-04-01 14:12
楼上说得对
 ++(itsRadius)是对地址进行++,结果是指向下一个存储空间。
 ++(*itsRadius) 是对该地址的内容进行++
#4
flyingzc2010-04-01 16:03
非常感谢
#5
succubus2010-04-01 16:46
一般看到输出意外的结果了
就找找代码里有没有对非法地址的操作
1