错误、漏洞、问题 - 页 1677

 
Sergei Vladimirov:
我没有写任何关于开盘价和收盘价的内容。
那么我一定是误解了你的意思--对不起。
 

为什么私有方法会出现错误?

class CFoo
  {
   private:
   void virtual func(int x) final { }
  };
 
class CBar : public CFoo
  {
   void func(int) { }
  };
 
fxsaber:

为什么私有方法会出现错误?

Private与此无关,你的函数被声明为final,而你正试图覆盖它。

ZS.我试着编译 - 编译器说问题是什么。

 
Sergei Vladimirov:
Private与此无关,你把这个函数声明为final。
所以在继承类中没有父类的私有方法。这就是为什么不应该有任何重写。
 
fxsaber:
所以在继承类中没有父类的私有方法。这就是为什么不应该有任何重写。
嗯,你好。
 
Sergei Vladimirov:
你们好。
公共继承权。根据编译器,从子代开始,父代的私有方法是不可用的。
 
fxsaber:
公共继承权。根据编译器,父类的私有方法在子类中是不可用的。

基类的私有虚拟方法不能从继承者那里调用,但你可以覆盖它,这就是你想做的。

 
Sergei Vladimirov:

基类的封闭虚拟方法不能被继承者调用,但可以被重写。

谢谢,我不知道。我想不出这在什么地方会有用。它与X_Macro 非常相似。我会试着把一个类似的例子放在一起,以获得更好的理解。
 
fxsaber:
我将尝试做一个类似的例子,以获得更好的理解。

这是一个很好的提示。

class BASE
{
private:
  void virtual Func() { Print(__FUNCSIG__); }
public:
  void Init() {Func();}
};

class CHILD : public BASE
{
private:
  virtual void Func() { Print(__FUNCSIG__); }
};

void OnStart()
{
  BASE* Base = new CHILD;
  
  Base.Init();
  
  delete(Base);
}

我想这样的结构可以在某个地方派上用场。

 
fxsaber:
公共继承。根据编译器,父类的私有方法在子类中是不可用的。
这可以用来做final关键字的类似物,明确地禁止进一步继承。