gpt4 book ai didi

C++ 在具体类中强制方法重写

转载 作者:可可西里 更新时间:2023-11-01 16:13:02 25 4
gpt4 key购买 nike

在 C++ 中有没有一种方法可以编写一个具体的类,当另一个类从它派生时,该类有一个必须重写的方法。抽象类允许派生类强制创建任何抽象方法的具体版本,但我想要的是一个强制执行此操作但也可以单独使用的基类。我知道抽象方法也可以指定默认功能,但这仍然是一个无法实例化的抽象类。

我也查看了模板方法模式,但这似乎也不是我想要的。

最佳答案

我假设您正在寻找这种情况的编译时强制执行(感谢@Chad 指出)

据我所知,C++ 中没有直接的语言机制。我的意思是,没有一个保留关键字可以放在您的方法声明前面来实现您想要的目标。

我认为您所说的是您软件中的设计问题。假设您想强制 foo() 方法由以下代码段中的所有继承类重新实现

class BaseButConcrete
{
... //Common stuff
... //

virtual void foo()
{ /*implementation that you do not want to be inherited, but will be...*/ }
}

class DerivedOtherConcrete : public BaseButConcrete
{
void foo()
{ /*different implementation,
but no obligation from compiler point of view*/ }
}

我看不出为什么不能在抽象基类中移动所有常见内容的良好设计理由。 根据您的描述,您不想继承 Derived 中的 foo 实现,所以不要继承那部分!因此,非常经典的设计应该可以解决问题:

class AbstractBase
{
... //Common stuff has moved here
... //
virtual void foo() =0;
}

class NotAnymoreBaseButStillConcrete : public AbstractBase
{
void foo()
{ /*implementation that should not be inherited,
and that will not by design*/ }
}

class DerivedOtherConcrete : public AbstractBase
{
void foo()
{ /*different implementation,
now mandatory compiler-wise for the class to be concrete*/ }
}

这样,公共(public)的东西仍然在所有派生类之间共享,并且您将不想继承的东西(即 foo 实现)保留在不在同一继承路径上的类中.

关于C++ 在具体类中强制方法重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011984/

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