目标:
共享具有相同功能的基类,但只有少数后代在实例化和释放受保护或私有指针时仅隐藏方法(getter 和 setter)。
问题:
仅在重新声明 setter 时,我在调用 getter 时收到此错误。
1>c:\projectengine\problem\main.cpp(8): error C2660: 'cDerived::SomeClass'
: function does not take 0 arguments
吸气剂并不是真正需要的,但如果它已经存在,为什么要公开功能。
结论:
cBase::SomeClass()
不受影响cDerived
。
注释掉下一行时,没有编译错误(当然):
virtual void SomeClass( cSomeClass* value ) override {}; // setter, C2660
然而,这会起作用,因此不会改变任何东西,这会增加内存泄漏的风险。另一方面,这个偶然的派生应该继承其余的功能,cBase
其本身就是一个后代。
我应该重写cBase
还是可以只隐藏 setter cDerived
?
有错误的代码:
主文件
class cSomeClass
{
};
class cBase : public cAbsoluteBase
{
public:
cBase() : m_pSomeClass( 0 ){}
virtual cSomeClass* SomeClass(){ return m_pSomeClass; }
virtual void SomeClass( cSomeClass* value ){ m_pSomeClass = value; };
protected:
cSomeClass* m_pSomeClass;
};
class cDerived : public cBase
{
private:
// hide these
//virtual cSomeClass* SomeClass() override { return m_pSomeClass; };
virtual void SomeClass( cSomeClass* value ) override {};
};
cDerived derived;
int main()
{
cSomeClass* someClass = derived.SomeClass(); // C2660
return 0;
}