同名方法不同参数在抽象类和接口里的实现问题

C++语言 码拜 10年前 (2015-05-11) 1812次浏览 0个评论
 

有一个共通的功能,想做成接口或者在抽象父类里做成抽象类,但是这个功能虽然是相同的,输入和输入参数有些不同,包括有可能参数个数和参数类型不同,这种时候还有没有可能做成一个共通的接口?还是只能单独写方法?

10分
有没有可能定义一个接口,可以选一部分参数或者通过参数转换来调用任何一个实现?
20分
一定要做成通用的接口不是不可以,根据你的描述,方法名字一样,但是参数列表不一样。可以这样,把本来的方法参数列表全部写到一个结构体里面,通过结构体的继承解决参数不同的情况。至于好不好用,你自己决定。

#include <stdio.h>

struct BaseInput
{
    virtual void __dummy_func () {} // for dynamic_cast
};

struct Derive1Input : public BaseInput
{
    int arg;
};

struct Derive2Input : public BaseInput
{
    float arg;
};

class Base
{
public:
    virtual void Method (BaseInput *p) {}
};

class Derive1 : public Base
{
public:
    virtual void Method (BaseInput *p)
    {
        Derive1Input *d1 = dynamic_cast<Derive1Input *>(p);

        if (d1) {
            // TODO
        } else {
            printf ("Derive1 Wrong input\n");
        }
    }
};

class Derive2 : public Base
{
public:
    virtual void Method (BaseInput *p)
    {
        Derive2Input *d2 = dynamic_cast<Derive2Input *>(p);

        if (d2) {
            // TODO
        } else {
            printf ("Derive2 Wrong input\n");
        }
    }
};

int main ()
{
    Derive1 derive1;
    Derive2 derive2;

    Derive1Input input1;
    Derive2Input input2;

    printf ("test 1\n");
    derive1.Method (&input1);
    derive2.Method (&input2);

    printf ("test 2\n");
    derive1.Method (&input2);
    derive2.Method (&input1);

    return 0;
}
名字是可以随便起的,如果把所有可能的参数全部写到一起,那按照这个思路,两个不相关的方法也能合并成一个方法了,按照调用的参数来决定执行的内容,这样不大好。
不过答案我知道了,理论上应该不可以的,要有一样的参数才能写成通用接口。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明同名方法不同参数在抽象类和接口里的实现问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!