通过将它们包含在命名空间下来使用多个类中的函数

时间:2016-12-02 21:47:48

标签: c++ class oop inheritance namespaces

我正在尝试编写一个包含同学代码的程序。我的代码看起来像这样

Class Class1 {
...
}

Class Class2 : public Class1 {
...
}

我的伙伴的代码是相同的,因为它有一个基本和派生类设置,与我的程序具有完全相同的所需功能,只是略有不同。现在我们想要通过使用命名空间来组合这些并从每个数据中提取数据来创建一个全新的类。这个概念有用吗?

namespace MyCode {
   Class1; Class2;
}
namespace HisCode {
    Class3; Class4;
}
Class New {
    using MyCode::function1;
    using HisCode::function2;
    void function3();
    ...
}

int main () {
    New Thing;
    Thing.function3();
    return 0;
}

2 个答案:

答案 0 :(得分:0)

我想到的一个解决方案就是这样写:

mIvBackground

不确定您的类的所有方法是否都是有效的解决方案,但确实可行。只有从2个类继承时,您必须确保在这2个类中没有相同名称的函数,或者至少它们不是虚拟的。

答案 1 :(得分:0)

您需要了解命名空间和类不一样。

命名空间组成

因此,您可以在命名空间中定义一些非成员函数:

namespace MyCode {
   ...
   void function1(int a) {}  // not a member function!!
}
namespace HisCode {
    class Class4 {};
    void function2(int b) {}
}

然后在另一个命名空间(或函数范围内)定义别名using MyCode::function1

<强>类

但是在一个类中,所有函数都是成员函数。所以你只能为成员函数引入using子句。并且仅适用于从某些基类继承的成员函数:

class OurNewClass {
public:
    using MyCode::function1;   // OUCH !!! Error:  not a member function
    void function3() {};
};

因此,如果要在类中组合成员函数,则需要某种继承:

class OurNewClass : public MyCode::Class1, public HisCode::Class3 {
public:
    void function3() {};
};

原则上你不需要using条款:父类的所有公共功能都可以从外面看到。只有在存在一些命名冲突时才需要using子句来消除歧义。

这里有一个完整的example online