class c1
{
public:
int m;
};
class c2
{
public:
int m;
};
class c3
{
public:
int m;
};
class A
{
public:
A(c1* p);
A(c2* p);
A(c3* p);
void Fun();
private:
c1* p1;
c2* p2;
c3* p3;
};
void A::Fun()
{
//这部分功能是c1,c2,c3类都要调用的一个函数,只是根据传过来的指针不同进行操作
//比如
if (是c1调用的)
{
p1->m = ...;
...
...
}
else if (c2调用的)
{
p1->m = ...;
...
...
}
else
{
p1->m = ...;
...
...
}
}
我想问的问题是如何在fun函数中不通过if else判断来实现这样的功能,因为if else中除了第一句
用到的指针不一样,其它部分完全一样,我觉得应该有办法简化fun函数吧,请大家帮助

解决方案 »

  1.   

    else if (c2调用的)
    {
    p2->m = ...;
    ...
    ...
    }
    else
    {
    p3->m = ...;
    ...
    ...
    }
    应该是这样的,发错了
      

  2.   

    我不想通过重载fun函数来实现,就像Fun(c1* p) fun(c2* p) fun(c3* p),关键的问题是fun函数中除了一句不一样,其它语句都一样
      

  3.   

    void A::Fun()
    {
    //这部分功能是c1,c2,c3类都要调用的一个函数,只是根据传过来的指针不同进行操作
    //比如
    if (是c1调用的)
    {
    p1->m = ...;
    }
    else if (c2调用的)
    {
    p1->m = ...;
    }
    else
    {
    p1->m = ...;
    }
       
             //共通代码      
             ...
    ...}
      

  4.   

    方法2:
    class A
    {
    public:
    A(c1* p)
             {
              p1 = p;
              m_pMember = &(p->m);
              };
                  
    A(c2* p)
             {
              p2 = p;
              m_pMember = &(p->m);
              };
    A(c3* p);
            {
              p3= p;
              m_pMember = &(p->m);
             }; void Fun();
    private:
    c1* p1;
    c2* p2;
    c3* p3;
             
        //假设m是int类型
        int *m_pMember;
    };
    void A::Fun()
    {
    //这部分功能是c1,c2,c3类都要调用的一个函数,只是根据传过来的指针不同进行操作
    //比如
    m_pMember = ...
             //共通代码      
             ...
    ...
    }