c++ - 创建一个包含其父类的所有功能的类,除了一个

标签 c++ c++11 inheritance visual-c++

假设我有两个类(class), 一个是:

class A{
public:
    void f1()
    {
        cout << "function 1";
    }
    void f2()
    {
        cout << "function 2";
    }
    void f3()
    {
        cout << "function 3";
    }
};

现在我希望 B 类包含 A 的所有功能,f3 除外。

我正在做的是:

class B: public A
{
    private:
    void f3()
    {

    }
};

据我所知,B::f3()隐藏了A::f3()的定义,而B::f3( ) 是私有(private)的,f3() 不能通过类 B 访问。但我仍然可以这样调用它:

B var();
var.A::f3();

有什么方法可以在不更改类 A 的情况下使用继承从类 B 中完全隐藏 f3 吗?

最佳答案

不要养成通过继承将类拼凑在一起的习惯,方法是混合和匹配大致执行您想要的操作的类。这会导致糟糕的代码。

但是,偶尔通过一个类实现另一个类确实有意义。在这些情况下,如果您正在使用继承,那么“正确”的方法是使用private 继承。

我所说的“正确”是指最可接受的方式。

class A
{
public:
    void f1()
    {
        cout << "function 1";
    }
    void f2()
    {
        cout << "function 2";
    }
    void f3()
    {
        cout << "function 3";
    }
};

class B: private A
{
public:
    using A::A; // use A's constructors
    using A::f1;
    using A::f2;
    // do not use f3
};

这可能有意义的时候是由于涉及的方法数量太多,组合太乏味了。

关于c++ - 创建一个包含其父类的所有功能的类,除了一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029330/

相关文章:

java - Java中的静态方法是继承的吗?

c++ - 从派生类中删除虚函数

c++ - 使用与滥用通用算法

c# - 如何将继承一次应用于一组类

c++ - 链接到 MFC 项目的没有 mfc 的 C++ 静态库是否抛出 bad_alloc 或 CMemoryException*?

c++ - 在跨平台代码中处理 stdafx.h

c++ - recv 读取不完整的数据包

c++ - 互斥锁如何在低级别等待解锁?

c++ - 如何使用消息正确创建自定义异常?

c++ - std::thread 不是使用 Eclipse Kepler MinGW 命名空间 std 的成员