我正在编写一个指向Derived类的指针的程序.这是我的代码,
#include <iostream>
using namespace std;
class base {
int i;
public:
void set_i(int num) { i=num; }
int get_i() { return i; }
};
class derived: public base {
int j;
public:
void set_j(int num) {j=num;}
int get_j() {return j;}
};
int main()
{
base *bp;
derived d[2];
bp = d;
d[0].set_i(1);
d[1].set_i(2);
cout << bp->get_i() << " ";
bp++;
cout << bp->get_i();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序显示1个正确的值和其他垃圾值,因为
BP ++;
将指针递增以指向类基类型的下一个对象,而不是类派生类型.
我们可以通过写作正确地显示答案
> bp =& d[0];
bp1=&d[1];
d[0].set_i(1);
d[1].set_i(2);
Run Code Online (Sandbox Code Playgroud)
但是我们必须分配2个指针.同样,如果我们必须取100个值,那么我们必须分配100个指针.这不好.
我的问题是,我们可以用单指针显示数组的值吗?
我想象OP试图这样做的原因是他可以拥有一个对象数组,这些对象可以是某些基类的任意派生实例,并迭代它们.如果是这种情况,您确实需要一个指向基类的指针数组.就像是:
class Base { /* ... */ };
class Derived1 : public Base { /* ... */ };
class Derived2 : public Base { /* ... */ };
// ...
Base *arr[10] = {new Derived1(), new Derived1(), new Derived2(), ...};
// ...
for(Base **p = arr; p < arr+10; ++p) {
*p->foo();
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果我猜到了OP的真正问题,我想这会解决它.