【问题标题】:Best way to call super class constructor or method is? [closed]调用超类构造函数或方法的最佳方式是? [关闭]
【发布时间】:2015-04-12 22:18:41
【问题描述】:

我需要弄清楚,显式调用超类构造函数/方法的最佳方式。

我尝试了以下两种方式来调用超类构造函数:

Myclass::Myclass(int a, int b):X(a),Y(b)
{
    // do something
}

Myclass::Myclass(int a, int b)
{
X = a;
Y = b;
}

所以我的问题是:

  1. 显式调用超类构造函数/方法的最佳方式是什么?
  2. 这两种方式都有哪些好处?
  3. 最佳做法是什么?为什么?
  4. 两种方式都有性能问题吗?

关于我的问题,我找到了这个链接: What are the rules for calling the superclass constructor? 但我仍然对我上面的问题有点怀疑。

如果有任何在线教程、博客或视频,你也可以在这里提及,这对我很有帮助。提前致谢.....

【问题讨论】:

  • 第二个没有做你认为的那样。 (如果XY 都没有默认构造函数,它甚至不应该编译)。编辑:现在它只会在 X 和 Y 是成员变量时编译。
  • 你链接的问题在什么方面不清楚?
  • @WhozCraig 或者有一个非显式构造函数采用 int
  • XY 应该是 Myclass 的两个直接基类?
  • @MattMcNabb 如果它们是实例变量的名称,它将在 both 示例中编译。但是我们刚刚发现它们都是类型,所以第二种仍然是垃圾。 真实代码示例不是很方便吗?你可能来晚了。第二个构造函数的原始帖子看起来与 stensoft 的答案一样。它已经改变了。

标签: c++ constructor superclass


【解决方案1】:

调用超类的构造函数的唯一正确方法是从初始化列表中:

Myclass::Myclass(int a, int b)
    :X(a),Y(b)
{}

另一种方式其实调用不同的构造函数:

Myclass::Myclass(int a, int b)
    // implicit :X(),Y()
{
    // These two don't call constructors but actually declare variables
    X(a);
    Y(b);
}

【讨论】:

  • 第二个只调用一次构造函数; X(a);Y(b); 是变量的声明
  • 你是对的。我已经更正了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多