我正在尝试用c ++做这样的事情。
void showContensofArray(void *data[])
{
//In this function have to display the values of respective objects.
// Any ideas how do I do it?
}
int main(){
A phew(xxx,abcdefg); //object of class A
B ball(90),ball2(88); //object of class B
void *dataArray[2];
dataArray[0] = &ph1;
dataArray[1] = &ball;
showContentsofArray(dataArray); //function
}
答案 0 :(得分:1)
如果你想一般地处理数据[]中的对象(即通过调用它们上的公共函数来提取描述或值),那么为你的对象定义一个类hirachy,并在你的showContentsofArray函数中调用你的虚拟方法(公共基类)对象指针
这是Polymorphism的教科书示例:
“polymorphism允许使用统一的接口处理不同数据类型的值。”
在下面的示例中,基类BaseObject定义了统一接口。
class BaseObject {
virtual string description() { return "Base object"; }
virtual bool bounces() { return false; }
}
class B : public BaseObject {
string description() { return "Im a B object" }
bool bounces() { return true; }
}
class A : public BaseObject {
string description() { return "Im an A object" }
}
void showContensofArray(BaseObject* data[], int size) {
for (int i=0; i<size; i++) {
cout << data[i]->description();
if (data[i]->bounces())
cout << "I bounce!";
}
}
int main() {
A phew(xxx,abcdefg); //object of class A
B ball(90),ball2(88); //object of class B
BaseObject* dataArray[2];
dataArray[0] = &ph1;
dataArray[1] = &ball;
showContentsofArray(dataArray);
}
将输出:
Im an A object
Im a B object
I bounce!
答案 1 :(得分:0)
回到原来的类型:
A* p1 = static_cast<A*>(data[0]);
B* p2 = static_cast<B*>(data[1]);
答案 2 :(得分:0)
void showContensofArray(void *data[], int len)
{
int i;
for(i=0;i<len;i++){
((Base*)(data[i]))->print();
}
}
每个Class都应该具有知道如何打印其值的方法print()
的实现。
您也可以使用继承。
编辑:
@Ricibob的回答是正确的,但是如果你需要在函数内部进行转换,你需要做这样的事情:
#include <iostream>
using namespace std;
class Base{
public:
virtual void print()=0;
};
class A: public Base{
public:
void print(){
cout<<"Object A"<<endl;
}
};
class B: public Base{
public:
void print(){
cout<<"Object B"<<endl;
}
};
void showContensofArray(void* data[], int len)
{
int i;
for(i=0;i<len;i++){
((Base*)(data[i]))->print();
}
}
int main(){
A a;
B b;
void* v[2];
v[0]= &a;
v[1] = &b;
showContensofArray(v,2);
return 0;
}
你不能逃避继承。