class A
{
private:
// конструктор по умолчанию недоступен
A(){}
public:
A(constdouble& value)
: m_Value(value)
{}
private:
double m_Value;
}
class B
{
public:
B()
// т.к. коструктор А не имеет конструктора по умолчанию, единственный способ// использования класса -- инициализация в списке инициализации.// по-другому просто не должно скомпилиться
: A(0)
{
}
private:
A m_Value;
}
这一切都写在评论中。
例2:
class A
{
public:
A()
{
Init(0);
}
A(constdouble& value)
{
Init(value);
}
void Init(doublevalue)
{
// очень тяжелая функция
}
};
class B
{
public:
// вариант1, правильный
B(constdouble& value)
: m_Value(value)
{
}
/*
// вариант2, неправильный
B(const double& value)
{
m_Value.Init(value);
}
*/private:
A m_Value;
};
你想(我想这是显而易见的)--在文件名变量中获得重写的名字......。
为了使Init()正常工作,它必须在 构造对象后 被调用。
还是没有?
我认为VMT只在构造函数的最终代码中被初始化,所以当在构造函数中调用方法时,将调用变量类型的方法,而不是被构造对象的类型。
那是像这样的事情。
至少这个是有效的。
致MetaQuotes:如果我没有理解错的话,最好是完全禁止在构造函数 中调用虚函数。敬请关注。
或者让他们正确地工作。我对此表示怀疑。
刚刚开始了解参数化构造函数。但似乎在这个例子中
突出显示的一行中的括号位置不正确。刚刚开始了解参数化构造函数。但似乎在这个例子中
突出显示的一行中的括号是错误的。技术帖(关于初始化的小讨论的开始,也在构造函数中)。移动了,这样就不会在新手的沉重脚步声中迷失方向:https://www.mql5.com/ru/forum/58/page31#comment_66890
一个关于初始化的问题。一般来说,字符串变量和复杂对象的初始化 是自动完成的,"默认"。这就浪费了计算机一定的计算能力(我称之为 "计算机时钟",对不起,我用的是业余术语)。
现在有了初始化列表,允许你用自定义的值来初始化变量。自动初始化和用自定义值初始化在初始化速度上是否有区别?换句话说,与自动初始化相比,使用初始化列表(和自定义值)时,"计算机笔触 "的数量是否增加?
而如果我们节省了几个时钟周期,是否会带来显著的收益?特别是由于初始化只做了一次,以后仍然要分配数值。
这对我个人来说是一个重要的问题,因为我想了解这个技术。
正确的方法,一切都会是这样的。初始化列表是引入参数化构造函数的一个结果。
让我们来研究两个例子。
这一切都写在评论中。
例2:
因此,在变体1中,我们有一个Init的调用,在变体2中,我们有两个调用。而且由于 "喜欢 "功能非常重,所以加分项也在那里。TheXpert,非常感谢你!我会研究的。
我从你的话中间接理解到,自动初始化 "字符串、动态数组 和复杂对象"类型的变量与用户初始化同一变量在速度上没有区别。
我从你的话中隐约理解到,自动初始化一个 "字符串、动态数组 和复杂对象"类型的变量和用户初始化同一个变量在速度上没有区别。