c – 纯虚函数的重载

前端之家收集整理的这篇文章主要介绍了c – 纯虚函数的重载前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我通常使用纯虚函数来处理我的代码所需的那些方法.因此,我创建接口,然后其他用户实现其派生类.派生类只将这些虚函数作为公共函数,而一些其他方法应该作为私有实现,因为我的代码不会调用它们.
我不知道这是否可以被认为是OOP的一个好习惯(有没有设计模式?).
无论如何,我的问题是:
用户可以重载纯虚函数吗?

class Base
{
public:
 Base();
 virtual ~Base();
 virtual void foo(int,double)=0;
};

class Derived:
public Base
{
 private:
  // methods
 public:
 Derived();
 virtual ~Derived();
 virtual void foo(int,double,double); //this doesn't work
 };

解决方案可能是:

virtual void foo(int,double=0)=0;

在基类但它是非常有限的.你有什么想法?

解决方法

这两个功能是不同的.后者并不压倒第一个
virtual void foo(int,double)=0;
virtual void foo(int,double);

第二个是特定于派生的新虚函数.

如果你在最后放置一个覆盖,编译会抱怨你没有覆盖任何东西.这是c 11检查.

virtual void foo(int,double) override;

用户可以覆盖纯虚函数以确认函数末尾的使用覆盖以进行验证.在您的情况下,只能使用派生指针或类型访问第二个函数. (虽然除非正确地重写和实现纯虚函数,否则无法实例化,直到它是一个抽象类).因此,如果不打算通过Derived派生的类进一步覆盖它,那么使它成为虚拟是一种开销,因为它不会覆盖基本方法.

猜你在找的C&C++相关文章