这是今天早些时候的测验中的代码。语言: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.
};
我的印象是我已经完成了测验但是当我继续尝试在家里的计算机上实现它时,我意识到draw函数返回垃圾值/内存地址。其他一切都因此受到影响。你能告诉我为什么会这样吗?它与指针的范围有关吗?我希望能够将指针用作常规变量。只是一个学生。提前致谢!
答案 0 :(得分:3)
如果这是C ++,这就是它的样子,那么你的问题就是你要指定构造函数参数地址的指针。
构造函数参数在调用构造函数时创建,并在构造函数被销毁时销毁,因此,在构造函数被销毁后,指针将指向垃圾。将指针分配给非函数局部变量。
答案 1 :(得分:2)
将a和b放在堆栈上,并将x和y指针分配给a和b的地址 将使x和y指向堆栈中的某个位置,因此* x(和* y)的值是在这些地址的堆栈上发生的任何内容。