想写一个类,这个类的某些行为由调用这个类的对象决定
class A
{
public:
dosomething();
}
class B
{
A a;
public:
void myfun()
{
a.dosomething();//这里dosomething的行为,想由B来决定
}
}
有人建议dosomething传入一函数指针
dosomething(MyFun f)
{
f();
}
有没有用设计模式或类、继承之类的东西解决之道?
[解决办法]
#include <iostream>using namespace std;class FunPtrTest{typedef void (FunPtrTest::*funcp)();public:void doaaa(){cout<<"doaaa\n";}void DoSomething(){funcp dodo(&FunPtrTest::doaaa);(this->*dodo)();}};int main(int argc, char *argv[]){FunPtrTest test;test.DoSomething();return 0;}
[解决办法]
由子类来决定做什么事情?
这不就是继承么?重写那个函数就可以。。。
[解决办法]
其实策略模式挺适合这种情况的,具体你可以这么做:
1、在A中定义一个成员变量m_func,其类型为Idosomething,Idosomething是所有具体dosomething类的基类。
2、由具体调用的类定义并传入派生的dosomething类。
[解决办法]
看了这么多贴子,还是不太明白楼主想干嘛。是不是想说多态啊?
基类A,包含虚函数f,继承类AA,AB,分别继承虚函数f.
声明两对象A *aa = new AA; A *ab = new AB;
这样对于调用者来说aa和ab都是A对象指针,也不必具体区分。但是aa->f和ab->f会分别调用AA和AB的方法。
这是否能够满足楼主的要求?
[解决办法]
传个接口给A, A提供数据,接口定义行为.
如下:
class A {
public:
class I_parser {
public:
virtual void on_data(const char *data) = 0;
};
A(){}
void dosomething(I_parser *parser) {
// ...
while (...) {
char *data;
//make data
//...
parser->on_data(data);
}
// ...
}
};
class B :public A::I_parser {
A a;
virtual void on_data(const char *data) {
printf(data); //or other parser;
}
public:
B(){}
void fun() {
// ...
a.dosomething(this);
// ...
}
};