首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

念写一个类,这个类的某些行为由调用这个类的对象决定

2013-02-05 
想写一个类,这个类的某些行为由调用这个类的对象决定class A{public:dosomething()}class B{A apublic:v

想写一个类,这个类的某些行为由调用这个类的对象决定
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);
//     ...
    }
};

热点排行