gpt4 book ai didi

c++ - 强制派生类实现私有(private)方法

转载 作者:行者123 更新时间:2023-11-30 03:40:26 25 4
gpt4 key购买 nike

有没有办法,我可以强制派生类通过私有(private)函数实现接口(interface)。我想要的是以下内容。

class base{
private:
virtual void do_something() = 0; // This can be private/public/protected
};

派生类必须提供非公开的do_something() 的实现。你可以猜到,我的目标是让用户给出一个函数的实现,但要确保基类是将调用它的基类和 class derived 的对象:public base{... 永远无法自己调用 do_something() 吗?

编辑:只是想补充一点,class derived : base 将由用户而不是我编写。用例是确保在调用 do_something() 时基类的函数控制。

最佳答案

TL;DR:


给定

class base {
private:
virtual void do_something() = 0;
};

您不能强制派生类将 do_something 实现为私有(private)的。以下是合法的:

struct derived : base {
void do_something() { ... } // public
};

即使你可以强制它是私有(private)的,一个类也总是可以调用它自己的私有(private)方法。这将与您的要求背道而驰,即“class derived : public base{...} 的对象将永远无法调用 do_something() 靠自己”。


即使您可以强制派生类在无法调用的情况下实现一个方法,它们仍然可以像这样解决它:

struct derived2 : base {
void do_something_impl() { .... }
private:
void do_something() { do_something_impl(); }
};

现在他们可以直接调用 do_something_impl()

关于c++ - 强制派生类实现私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38025933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com