G***n 发帖数: 877 | 1 请教OOP的C++问题
一个class A里面有virtual function fun(),现在把A作为一个interface.
然后让B,C,D....继承A,并且overwrite这个virtual function.
现在有一个数组是vector,当然vector里面可能是B,C,D,...任意一个class。
如果要做一个循环处理这个vector,如何知道vector里的每一个element是B,C,D中的
哪一个呢?因为要处理fun()的返回值,想知道每个element是哪个class。 | p****e 发帖数: 3548 | 2 返回值的struct里包含类的名字信息就行了啊
【在 G***n 的大作中提到】 : 请教OOP的C++问题 : 一个class A里面有virtual function fun(),现在把A作为一个interface. : 然后让B,C,D....继承A,并且overwrite这个virtual function. : 现在有一个数组是vector,当然vector里面可能是B,C,D,...任意一个class。 : 如果要做一个循环处理这个vector,如何知道vector里的每一个element是B,C,D中的 : 哪一个呢?因为要处理fun()的返回值,想知道每个element是哪个class。
| G***n 发帖数: 877 | 3 这个办法不错,但还是要maintain一个name list,有没有更好的办法?C++里面没有提
供类似的机制吗?
【在 p****e 的大作中提到】 : 返回值的struct里包含类的名字信息就行了啊
| p****e 发帖数: 3548 | 4 typeid
但是估计会有效率问题
【在 G***n 的大作中提到】 : 这个办法不错,但还是要maintain一个name list,有没有更好的办法?C++里面没有提 : 供类似的机制吗?
| v******9 发帖数: 1 | 5 可以不需要typeid,不过就比较奇怪一点。
tester.h
================
class A{
public:
virtual void invoke();
};
class B:public A{
public:
void virtual invoke();
};
class C:public A{
public:
void invoke();
};
class D:public A{
public:
void invoke();
};
=====================
main.cpp
=====================
#include
#include
#include "tester.h"
using namespace std;
void test(A* a){
cout<<"test: A "<
};
void test(B* a){
cout<<"test: B "<
};
void test(C* a){
cout<<"test: C "<
};
void test(D* a){
cout<<"test: D "<
};
void A::invoke(){
cout<<"A"<
test(this);
}
void B::invoke(){
cout<<"B"<
test(this);
}
void C::invoke() {
cout<<"C"<
test(this);
}
void D::invoke() {
cout<<"D"<
test(this);
}
int main(int argc, const char * argv[])
{
vector vec;
B b;
C c;
D d;
vec.push_back(&b);
vec.push_back(&c);
vec.push_back(&d);
for(auto obj: vec){
obj->invoke();
}
// insert code here...
std::cout << "Hello, World!\n";
return 0;
}
====================== | s*******n 发帖数: 196 | 6 这个设计听起来不怎么oop,为什么要知道type,能抽象出来吗
【在 G***n 的大作中提到】 : 请教OOP的C++问题 : 一个class A里面有virtual function fun(),现在把A作为一个interface. : 然后让B,C,D....继承A,并且overwrite这个virtual function. : 现在有一个数组是vector,当然vector里面可能是B,C,D,...任意一个class。 : 如果要做一个循环处理这个vector,如何知道vector里的每一个element是B,C,D中的 : 哪一个呢?因为要处理fun()的返回值,想知道每个element是哪个class。
|
|