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。 | s******u 发帖数: 501 | 2 A* p = new B();
dynamic_cast(*p); // good
dynamic_cast(*p); // throw exeption | t****t 发帖数: 6806 | 3 first of all, you can not have vector and expect each element to be
polymorphic.
you can, however, have vector and each element point to a polymorphic
object.
as for how to check, you can test return value of dynamic_cast<> as someone
else replied. but this is a dumb design.
【在 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。
| o***g 发帖数: 2784 | 4 要处理的返回值的代码也分别写在B C D里,这样它们就能自己找对了
【在 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。
| d****i 发帖数: 4809 | 5 可以用标准C++的typeid().name()
http://en.cppreference.com/w/cpp/language/typeid
尽管C++不鼓励这样做:
When applied to an expression of polymorphic type, evaluation of a typeid
expression may involve runtime overhead (a virtual table lookup), otherwise
typeid expression is resolved at compile time.
【在 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。
| N******K 发帖数: 10202 | 6 定义一个 vector ClassLabel; 0-A, 1-B, 2-C
然后根据Label 用static_cast
【在 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。
| o***g 发帖数: 2784 | 7 我认为这个是王垠说的,自己制造问题自己解决问题
而更好的办法是,消灭问题
【在 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。
|
|