草庐IT

c++ - 如何强制所有派生类实现虚方法?

假设您有一个类树的基类Dep。有一个虚拟方法Dep*Dep::create()我希望每个叶类都实现它。有什么办法可以强制执行此操作吗?注意:这里的问题是可能有中间类(比如classB:publicA:publicDep)通过以下方式实现此方法(A::create)意外或因为他们认为他们是叶类,但实际上他们自己是子类。问题到此结束。上下文如果你好奇我为什么需要这个;我有一个Master类,它具有未知具体类型的Dep对象。如果Master是重复的,我需要拿出Dep实例的匹配克隆。下一个最好的办法是虚拟构造函数惯用语,它恰好引入了这个问题。此外,我什至无法捕捉到这一点(除了可怕的崩溃),因为

c++ - 为类层次结构重载 operator== 的正确方法是什么?

假设我有以下类层次结构:classA{intfoo;virtual~A()=0;};A::~A(){}classB:publicA{intbar;};classC:publicA{intbaz;};为这些类重载operator==的正确方法是什么?如果我将它们全部设为自由函数,那么B和C不能在不强制转换的情况下利用A的版本。它还会阻止某人仅引用A进行深度比较。如果我将它们设为虚拟成员函数,那么派生版本可能如下所示:boolB::operator==(constA&rhs)const{constB*ptr=dynamic_cast(&rhs);if(ptr!=0){return(bar=

c++ - 为类层次结构重载 operator== 的正确方法是什么?

假设我有以下类层次结构:classA{intfoo;virtual~A()=0;};A::~A(){}classB:publicA{intbar;};classC:publicA{intbaz;};为这些类重载operator==的正确方法是什么?如果我将它们全部设为自由函数,那么B和C不能在不强制转换的情况下利用A的版本。它还会阻止某人仅引用A进行深度比较。如果我将它们设为虚拟成员函数,那么派生版本可能如下所示:boolB::operator==(constA&rhs)const{constB*ptr=dynamic_cast(&rhs);if(ptr!=0){return(bar=