gpt4 book ai didi

C++:在编译与运行时禁止派生类中的虚函数

转载 作者:行者123 更新时间:2023-11-30 02:54:11 27 4
gpt4 key购买 nike

我有一个父 class RO,它有一个方法 void setup(const int* p)。我需要一个子 class RW 来拥有只允许非 const 指针的相同方法。

我通过在 class RO 中创建两个方法并在 class RW 中禁止其中一个方法来做到这一点:

class RO
{
public:
void setup(int* p) { DO SMTH }
virtual void setup (const int* p) { RO::setup( const_cast<int*>(p) ); }

// the rest...
void read() const;
};

class RW : public RO
{
public:
virtual void setup (const int* p) { throw SMTH }

// the rest...
void write();
};

我希望能够尽可能在编译时禁止 RW::setup。即,

const int* p;

RO* ro = new RW;
ro->setup(p); // Throw at run time, since it can be unknown
// at compile time that ro points to RW and not to RO.

RW* rw = new RW;
rw->f(p); // Disallow this at compile time, since it is
// known at compile time that rw points to RW.

有办法吗?

最佳答案

使用私有(private)而不是公共(public)继承。使用 using 关键字使父类的方法在子类中可用。

公共(public)继承适用于使用父类对象的人也可能使用 chid 类对象的情况(有关详细信息,请查看 Liskov substitution principle)。你的要求打破了这一点,所以它不是公共(public)继承的情况。

关于C++:在编译与运行时禁止派生类中的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17307983/

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