c++ - 私有(private)或 protected 继承中的虚函数

标签 c++

公共(public)继承中的虚函数很容易理解。那么私有(private)或 protected 继承中的虚函数有什么意义呢?

例如:

class Base {
public:
virtual void f() { cout<<"Base::f()"<<endl;}
};

class Derived: private Base {
public: 

void f() { cout<<"Derived::f()"<<endl;}

};

这还叫覆盖吗?这个案子有什么用?这两个f()是什么关系?

谢谢!

最佳答案

正如 Scott Meyers 在 Effective C++ 中解释的那样,私有(private)继承只是一种实现技术,而不是 is-a 关系:

class Timer {
public:
    explicit Timer(int tickFrequency);
    virtual void onTick() const; // automatically called for each tick
    ...
};

class Widget: private Timer {
private:
    virtual void onTick() const; // look at Widget private data
    ...
};

Widget 客户端不应该能够在 Widget 上调用 onTick,因为这不是 Widget 概念接口(interface)的一部分。

关于c++ - 私有(private)或 protected 继承中的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2157854/

相关文章:

c++ - MySQL API : Lost connection to MySQL server during query

c++ - 为什么成员函数调用没有段错误?

c++ - 我如何解决 "[Error] invalid use of incomplete type ' 类 SLLNode'"链表

c++ - 根据 visual studio 的 Intellisense,CUDA 内在函数未定义

c++ - 避免不必要的负载 (SSE/AVX)

c++ - boost::spirit 当词法分析器标记 > 10 时编译错误

c++ - 如何以非阻塞方式压缩文件

C++,将n个参数的函数作为参数传递

c++ - 从另一个线程修改 vector 中的指针数据是否安全?

c++ - 为什么C++在创建数组时不允许 `new`调用构造函数