关于类定义的问题

Posted

技术标签:

【中文标题】关于类定义的问题【英文标题】:question on class definitions 【发布时间】:2011-03-08 14:06:41 【问题描述】:

我看到以下两个类定义声称是等价的。真的吗?如何?谢谢。

class  complex
double re, im;
public:
  complex( ): re(0) , im(0)  
  complex (double  r): re(r), im(0)   
  complex (double  r, double i): re(r),   im(i)  
;
class  complex
  double re, im;
  public:
    complex (double  r=0, double i=0): re(r),   im(i)  
;

【问题讨论】:

【参考方案1】:

第一个单独列出所有可能性(无参数,一个参数,两个参数)(overloading),第二个因为使用default parameters,所以只需要一个函数,它完全一样,但要短得多.

如果变量的初始化不仅仅是为它们分配一个值,或者您希望根据参数计数拥有完全不同的构造函数,第一个仍然有用。

【讨论】:

【参考方案2】:

严格来说,它们并不等价(毕竟,第二个只有一个构造函数,而第一个有三个),但它们的行为是相同的。具有为所有参数提供默认值的非零参数的构造函数有资格作为默认构造函数。

【讨论】:

【参考方案3】:

是的。它们是等价的。但我认为第二个更好,因为它很紧凑,利用了一个名为 default argument 的 C++ 特性。

【讨论】:

【参考方案4】:
class  complex
  double re, im;
  public:
    complex (double  r=0, double i=0): re(r),   im(i)  
;

是实现第一个版本的一种简化方式。基本涵盖了第一个三个构造函数的所有情况。

【讨论】:

【参考方案5】:

后一个示例中的默认值 (r=0) 允许部分或全部省略参数。 因此,一个构造函数方法包含上面示例中的所有三个变体。

【讨论】:

以上是关于关于类定义的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于java编程的问题:一个类调用另一个类中构造方法中所定义的参数。

C# 2008(.net)百分跪求高手关于自定义的类转换byte[]问题!

关于java枚举类的一个问题

89.关于类的定义抽象数据类型

Proguard 关于重复类定义的警告,但不打印出重复的类

关于纯虚析构函数的问题