【问题标题】:Difference between in class and constructor initialisation [closed]类和构造函数初始化之间的区别[关闭]
【发布时间】:2017-02-07 23:47:42
【问题描述】:

我想在下面的代码中理解

class x
{
    int a=3;
    ...
    other class members
}

class y
{
    int a;
    public y()
    {
        a=3;
    }
    ...
    other class members
}

这两种初始化方法有什么区别? 还有跟静态类有关系吗?

【问题讨论】:

  • 你确定你在谈论 C++ 吗? C++ 中没有静态类,成员函数的可见性不是每个函数,类以分号终止...
  • 通常你像public y() : a(3) { }一样初始化。另外,您最初的缩进样式完全怪异且无法阅读。
  • 我只看到一种初始化方法。
  • 你的代码不是 C++。 C++ 语法是“public:”,在单词“public”之后有一个冒号“:”。 C++ 和 C# 是不同的语言。
  • 您问的是 C++ 还是 C#。它们是两种不同的语言。

标签: c# c++ oop


【解决方案1】:

在 C++11 标准下,我们可以为 数据成员。当我们创建对象时,类内初始化器将是 用于初始化数据成员。没有初始化器的成员 是默认初始化的。

您的第一个示例使用 类内初始化程序,而您的第二个示例仅在默认构造函数中初始化 a

假设你有另一个构造函数z,它接受一些参数但不初始化数据成员a。然后调用z

  • 如果您使用类内初始化程序,它将用于设置a = 3
  • 如果您只在默认构造函数中初始化a,则a 将未初始化。

【讨论】:

  • 非常感谢您的“积极响应”。是的,这种初始化在几乎所有支持 OOP 的语言中都是可能的。我在另一个网站上得到了答案。只是为了让其他人知道,如果构造函数没有给它另一个值或者没有构造函数,则类 x 变量 'a' 将取值 3。如果构造函数给它一个值,'3' 将被简单地转储。
猜你喜欢
  • 2014-09-17
  • 2013-02-10
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2012-08-25
相关资源
最近更新 更多