57 lines
1.7 KiB
MQL5
57 lines
1.7 KiB
MQL5
|
//+------------------------------------------------------------------+
|
||
|
//| FinalDelete.mq5 |
|
||
|
//| Copyright 2021, MetaQuotes Ltd. |
|
||
|
//| https://www.mql5.com |
|
||
|
//+------------------------------------------------------------------+
|
||
|
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Base stub |
|
||
|
//+------------------------------------------------------------------+
|
||
|
class Base
|
||
|
{
|
||
|
public:
|
||
|
void method() { Print(__FUNCSIG__); }
|
||
|
};
|
||
|
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Derived stub |
|
||
|
//+------------------------------------------------------------------+
|
||
|
class Derived final : public Base
|
||
|
{
|
||
|
public:
|
||
|
void method() = delete;
|
||
|
void derivedMethod() { Print(__FUNCSIG__); }
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
// ERROR:
|
||
|
// cannot inherit from 'Derived' as it has been declared as 'final'
|
||
|
class Concrete : public Derived
|
||
|
{
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Script program start function |
|
||
|
//+------------------------------------------------------------------+
|
||
|
void OnStart()
|
||
|
{
|
||
|
Base *b;
|
||
|
Derived d;
|
||
|
|
||
|
b = &d;
|
||
|
b.method();
|
||
|
|
||
|
((Derived *)b).derivedMethod(); // explicit typecasting in-place
|
||
|
|
||
|
/*
|
||
|
// ERROR:
|
||
|
// attempting to reference deleted function 'void Derived::method()'
|
||
|
// function 'void Derived::method()' was explicitly deleted
|
||
|
((Derived *)b).method();
|
||
|
d.method();
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
//+------------------------------------------------------------------+
|