Все объекты в MQL5 по умолчанию передаются по ссылке, но есть возможность использовать и указатели объектов. При этом есть опасность получить в качестве параметра функции указатель неинициализированного объекта. В этом случае работа программы будет завершена критически с последующей выгрузкой. Автоматически создаваемые объекты как правило такой ошибки не вызывают, и в этом отношении они достаточно безопасны. В этой статье мы попробуем разобраться в чем разница между ссылкой и указателей, когда оправдано использование указателей и как написать безопасный код с использованием указателей.
Interesting:
亚历山大(AlexSTAL)提出的方法可能已经解决了这个问题(我们先不考虑它的某些问题性)。
哇哦,哇哦,哇哦,哇哦!
我没有建议这样做,我说有这种可能性。
那你有什么问题,我听不懂?
你一定是在讨论一个例子,其中一半的逻辑是缺失的,一半是错误的(从OOP的诞生开始留下的)?
哇哦,哇哦,哇哦,哇哦!
我没有建议这样做,我说有这种可能性。
那你有什么问题,我听不懂?
比方说,你需要把不同的对象放在一个数组中。
同时,这些对象的所有属性都应该存储在同一个数组中+应该有对所有事件和方法的访问。
据我所知,你提供的可能性(实现可能不同)允许访问对象的功能(事件和方法)。
但是在一个具有祖先类型的数组中存储数据是不可能的(鉴于这些数据没有在祖先中声明)。
让我澄清一下我的想法。
如果我们停留在这个特定的例子,那么。
1.例如,我们可以创建一个数组,它将存储对象的类型、X的位置、Y的位置。
2.我们可以尝试通过指针来识别一个唯一的对象(尽管在处理一个对象 时,指针可能不会被使用,那么最好是有一个类似句柄的东西)。
一个愚蠢的问题(我没有看到其他解决办法),为什么使用指针作为句柄(在祖先中创建一个属性并在构造函数中填充)?
我们没有得到在数组中存储后代属性的能力(只有那些在祖先中没有定义的属性)。例如,据我所知,我们不能在数组中存储圆的半径或正方形的边。
3.我们没有得到在数组中存储后代属性的能力(只有那些没有在祖先中铸成的属性)。例如,据我所知,我们不能在数组中存储圆的半径或正方形的边。
为什么它不工作...你不直接处理它们,而是使用你的 "GetValue "函数,加上 "半径 "参数(如果该对象是一个圆)...这是一种可能性...
你设定一个简单的具体任务
为什么它不工作...你不直接处理它们,而是使用你的 "GetValue "函数,加上 "半径 "参数(如果该对象是一个圆)...这是一种可能性...
你设定了一个简单、具体的问题
任务很简单,但谁又能说它很容易实施呢。
任务是将各种对象(基类的后代)和它们的数据一起记录到一个数组中。
让我们把话说清楚,连同他们的数据一起!!!。
2.每个子代的GetArea()。
3.增加以下功能。
a. 计算正方形的周长-边*4。
б.圆的周长的计算 -2πR。
3.在库中添加额外的形状--矩形(两边)和三角形。
4.增加以下功能。
a. 计算一个长方形的面积--底乘高。
б.计算一个长方形的周长--边长之和*2。
в.计算一个三角形的面积。
г.计算一个三角形的周长。
5.单独识别每个对象(在所有对象中和在其类别的对象中)。
最好是有或没有指针。
6.只用存储在数组中的数据来计算图形的周长和面积。
PS
不允许将代码从后代转移到祖先(除非这个代码适用于所有祖先)。
例如,你不能将半径转移到祖先中,因为正方形、矩形和圆形都没有半径。
只要新功能适用于所有的后代,就可以添加到祖先上。
我们以预告片中的代码为基础。
在一个单一的数组内,我个人只是通过在祖先上添加存储面积和周长的变量+向其写入数据的功能来解决这个问题。
在这种情况下,如果GetArea()和其他函数的直接计算结果被控制。
我似乎没有违反自己的规则。
我已经勾勒出实施你所描述的方法的一种方式。
它并不完整,但它是最重要的方法
我已经勾勒出用你描述的方法实施的一种方式。
它并不完整,但它是最重要的方法
方法很明确。这可能是解决类似问题的最佳方案之一。
至少现在是这样。
任务很简单,但谁说它很容易实施?
1.任务是将不同的对象(基类的后代)和它们的数据一起写入一个数组中。
...MQL5的电子表格 已经解决和描述了这个问题。
能够读到的东西有多好?:)
这也是不错的方法,虽然据我所知,这两种方法都是在传输/读取一个参数(尽管是不同的类型)时进行计算。
但是,如果有很多参数,而且不可能把它们都装进一个基类,该怎么办呢?
据我所知,要传递的参数的索引应该另外输入(同时,可以在类中创建一个参数按索引堆叠的数组)。
能够读到的东西有多好?:)
这也是不错的方法,尽管据我所知,这两种方法都是为传输/读取一个参数而设计的(尽管是不同的类型)。
如果有很多参数,不可能将它们全部纳入基类,该怎么办?
据我所知,可以输入要传递的参数的索引(也可以在一个类中按索引创建一个参数堆叠的数组)?