读书人

请问:C++关于指向一个对象数组的指针

发布时间: 2012-02-13 17:20:26 作者: rapoo

请教:C++关于指向一个对象数组的指针的操作
代码如下:
#include <iostream.h>

class base
{
int a;
public:
int getvalue()
{
cout < < "base get " < <endl;
return a;
}
void setvalue(int temp)
{
cout < < "base set " < <endl;
a=temp;
}
};
class derived: public base
{
int b;
protected:
int getvaluef()
{
cout < < "derived get " < <endl;
return b;
}
void setvaluef(int temp)
{
cout < < "derived set " < <endl;
b = temp;
}

};


int main()
{

derived a[4];//1.这里的已经分配空间了吗?要new这个对象阿?
base* pbase= a;//2,这里是不能这么做,否则后面结构错误,pbase+1不知道指到哪里去了,怎么改正呢?

for(int i=0;i <4;i++)
{
a[i].setvalue(i+1);
}

for(i=0;i <4;i++)
{
cout < <pbase-> getvalue() < < ", ";
pbase++;
}
return 0;

}

提问在代码的注释里。help!!!!

[解决办法]
1. 不需要 new 了,空间已经分配好,4个Derived
2. 这里没有错,pbase是个指针,开始直向了a的第一个元素,以后每次++一次就向后窜一个。


不过你这个程序结果不确定,setvalue是调用的Derived,getValue是调用的Based的,前一个设定b值,后一个打印a值。后面你会学到Virtual function,结果就不一样了。
------解决方案--------------------


no,错误很严重。
derived a[4];
如果你用derived指针进行迭代,没有问题。
也就是说
derived* p=a;
p++会正确遍历数组a的元素,指针每次移动的空间是sizeof(derived)。
但是你用的是base* p ,那么每次p++,指针每次移动的空间是sizeof(base),按照你的代码,大约是只移动了半个derived的地址。所以指向有错误。

读书人网 >C++

热点推荐