C ++:有选择地限制对超类的方法的访问?

时间:2011-03-09 12:05:51

标签: c++ inheritance

这是一个面试问题。我不是C ++专家,所以我需要一些帮助来找到这个问题的答案(我首先想要理解这个问题......这是一个有效的问题吗?)

问题:

  

假设我有一个派生的B类   来自A级,我想重用   一些但不是A的所有方法。   我如何限制访问   选择超类的方法?

谢谢!

2 个答案:

答案 0 :(得分:10)

我认为

  1. 您无法更改A
  2. 的定义
  3. 您想要选择A对象中可以访问B的哪些方法。
  4. using指令解决了您的问题。例如:

    class A
    {
    public: // or protected for that matter
        void foo();
        void bar();
    };
    
    class B : private A // or protected, depending on whether
                        // you want subclasses of B to expose
                        // some methods from A themselves
    {
    public:
        using A::foo;
    };
    

    使foo可用于B课,但不能bar。但需要注意的是,using A::foo会显示foo的所有重载。

答案 1 :(得分:3)

他们可能希望听到的答案是,您可以将这些方法放在基类的protected部分中,派生类不应该看到的方法应该进入{{ 1}}部分。

然而,退一步后,您可以通过指出可能有更好的重复使用代码的措施来获得额外分数,具体取决于函数的功能(例如使用标题中不可见的自由函数)文件)。