由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一个OOP的C++问题
相关主题
C++问题Interview questions, Bloomberg
One C++ question问个C++ virtual function的问题
新手请教:C++ decrement loop (转载)An example of strategy pattern
C++继承问题求教:这个程序为什么不能编译?
问个c++的问题弱问一道c++语法题
C/C++里数组作函数的参数的话应该怎么写?为什么大家那么喜欢做leetcode?
A question about C++. Thanks.srand()的问题
amazon的那道题目C++0x里的auto*做什么用的?
相关话题的讨论汇总
话题: void话题: invoke话题: test话题: cout话题: endl
进入JobHunting版参与讨论
1 (共1页)
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。

1 (共1页)
进入JobHunting版参与讨论
相关主题
C++0x里的auto*做什么用的?问个c++的问题
请教一个c的概念题C/C++里数组作函数的参数的话应该怎么写?
c++疑难问题。。A question about C++. Thanks.
请教ebay 的面试题一道amazon的那道题目
C++问题Interview questions, Bloomberg
One C++ question问个C++ virtual function的问题
新手请教:C++ decrement loop (转载)An example of strategy pattern
C++继承问题求教:这个程序为什么不能编译?
相关话题的讨论汇总
话题: void话题: invoke话题: test话题: cout话题: endl