我在头文件中遇到了以下代码:
class Engine
{
public:
void SetState( int var, bool val );
{ SetStateBool( int var, bool val ); }
void SetState( int var, int val );
{ SetStateInt( int var, int val ); }
private:
virtual void SetStateBool(int var, bool val ) = 0;
virtual void SetStateInt(int var, int val ) = 0;
};
Run Code Online (Sandbox Code Playgroud)
对我来说,这意味着Engine从它派生的类或类必须为那些纯虚函数提供实现.但我不认为派生类可以访问这些私有函数以重新实现它们 - 那么为什么要将它们变为虚拟?
如果B继承自A使用public,可以B覆盖其中一个函数并强制它为私有?
class A
{
public:
virtual double my_func1(int i);
virtual double my_func2(int i);
}
class B : public A // Notice the public inheritance
{
public:
virtual double my_func1(int i);
private:
virtual double my_func2(int i);
}
Run Code Online (Sandbox Code Playgroud)
反过来怎么样?如果继承类型是私有的 - 可以B强制特定的函数是公共的吗?
如果A是纯抽象怎么办?这有什么不同吗?
会protected做的任意组合有什么区别?