30 Kasım 2017 Perşembe

Final Specifier

Giriş
final bir anahtar kelime değil. Açıklaması şöyle.
override and final are not keywords.Instead they are special identifiers.
That means you can actually declare variables, functions or type-names (type-alias or classes) with those names.
Final Specifier sınıf ve virtual metodlar ile kullanılır.

Sınıf İçin 
Şöyle yapılır.
class Foo
{
  ...
};
class Baz final : public Foo
{
  ...
};
Metod İçin
Açıklaması şöyle. Bir virtual metodun artık override edilemeyeceğini belirtir. C#'taki sealed ile aynı mantıkta çalışır.
If you don't mark the function as virtual and final then the child-class can still implement the function and hide the base-class function.

By making the function virtual and final the child-class can not override or hide the function.
Kısaca şöyle tanımlanabilir.
void foo() final;
Uzun hali ise şöyle yazılır.
virtual void foo() final override;
C#'ta sealed başa yazılır, C++'ta ise sona yazılır.
public sealed override string Method1(){.....}
Örnek
Şöyle yaparız.
struct B {
    virtual void f() const final;   // do not override
    virtual void g();
};
struct D : B {
    void f() const;     // error: D::f attempts to override final B::f
    void g();       // OK
};
Destructor İçin
Örnek
Şöyle yaparız.
class Derived: public Base
{
  ...
  virtual ~Derived() final;
}
Bu durumda Derivide sınıfından kalıtmak mümkün olmaz. Şu kod derlenmez.
class FurtherDerived: public Derived {// not allowed
}

Hiç yorum yok:

Yorum Gönder