2

这是今天早些时候测验的代码。语言:C++。

class Shape
{ 
protected:
int *x;
int *y;
public:
void draw()
    {
      //we were supposed to add random code here.  
    }
};

我们被要求创建一个我们选择的重载运算符并在 main 中实现它。我被指针吓到了,所以我决定像这样创建一个构造函数:

class Shape
{ 
protected:
int *x;
int *y;
public:
void draw()
    {
       cout<<*x<<endl;
    }
    Shape(){};
    Shape{int a, int b)
    {
        x = &a; //this I thought would allow *x to act just like a normal variable. 
        y = &b; 
    }
    //code for operator overloading.
};

我的印象是我已经完成了测验,但是当我继续尝试在家里的计算机上实现它时,我意识到绘图函数返回垃圾值/内存地址。其他一切都会因此而受苦。你能告诉我为什么会这样吗?它与指针的范围有关吗?我希望能够将指针用作常规变量。只是一个学生。提前致谢!

4

2 回答 2

3

如果这是 C++,这就是它的样子,那么您的问题是您正在分配指向构造函数参数地址的指针。

构造函数参数在构造函数被调用时创建,在构造函数被销毁时被销毁,因此,在构造函数被销毁后,您的指针将指向垃圾。将指针分配给非函数局部变量。

于 2013-05-13T14:35:02.093 回答
2

a 和 b 被放入堆栈并将 x 和 y 指针分配给 a 和 b 的地址将使 x 和 y 指向堆栈中的某个位置,因此 *x(和 *y)的值是发生在堆栈在这些地址。

于 2013-05-13T14:51:32.490 回答