目前,我有一个父类和Setplay.h
中声明的2个子类,因此
namespace agent {
class Setplay {
public:
virtual int reset() {return 0;};
};
class ChildSetplay1 : public Setplay {
public:
virtual int reset();
};
class ChildSetplay2 : public Setplay {
public:
virtual int reset();
};
}
在Setplay.cpp
中,我定义了方法
namespace agent {
int ChildSetplay1::reset(){
return 1;
}
int ChildSetplay2::reset(){
return 2;
}
}
有没有办法避免重新声明.h
中的方法,并为每个孩子定义独特的方法?
如果我避免重新声明.h
中的方法:
namespace agent {
class Setplay {
public:
virtual int reset() {return 0;};
};
class ChildSetplay1 : public Setplay {};
class ChildSetplay2 : public Setplay {};
}
然后我收到以下错误:
错误:没有在'agent :: ChildSetplay1'中声明的'int agent :: ChildSetplay1 :: reset()'成员函数
但如果我将方法的签名更改为
,我无法为每个孩子定义不同的方法int reset(){
return ??; // return 1? 2?
}
我不确定是否有办法做到这一点,但我的动机是:
实际的课程有几种方法,并且一直重新声明一切看起来很丑陋
我仍然需要将所有内容保留在.cpp
和.h
那么,是否可能?或者有更好的选择吗?
答案 0 :(得分:1)
您需要为每个孩子定义该功能,因此您无法逃避这一点。你可以做的是,如果你有多个功能,可以使用#define
像:
#define SET_PLAY_FUNCTIONS public:\
virtual int reset();\
virtual int go();
namespace agent {
class Setplay {
public:
virtual int reset() {return 0;};
virtual int go();
};
class ChildSetplay1 : public Setplay {
SET_PLAY_FUNCTIONS
};
class ChildSetplay2 : public Setplay {
SET_PLAY_FUNCTIONS
};
}
至少你可以节省一些东西......