类Class(三):构造函数重载(Overloading constructors)

 

像其它函数一样,构造函数也可以重载,有相同的名字但有不同的参数:不同的参数个数或参数类型。编译器会根据参数自动匹配相应的函数,例如:

 

#include <iostream>
using namespace std;

class Rectangle {
    int width, height;
  public:
    Rectangle ();
    Rectangle (int, int);
    int area (void) {return (width*height);}
};

Rectangle::Rectangle () {
  width = 5;
  height = 5;
}

Rectangle::Rectangle (int a, int b) {
  width = a;
  height = b;
}

int main () {
  Rectangle rect (3,4);
  Rectangle rectb;
  cout << "rect area: " << rect.area() << endl;
  cout << "rectb area: " << rectb.area() << endl;
  return 0;
}
rect area: 12
rectb area: 25

 

上面的例子中,构造了类 Rectangle 的两个对象 :rect 和 rectb。其中 rect 有两个参数,和之前举得例子一样。

这个例子也引进了一个特殊种类的构造函数:默认构造函数(default constructor)。默认构造函数是没有参数的,它之所以特殊,是因为 只要有一个对象被声明时(且这个对象不需要用任何参数初始化),那么就会立刻调用 默认构造函数。上面的例子中,rectb 被声明时就会调用默认构造函数。

注意:声明 rectb 时如不想传入参数,则后面没有双括号(),如果写上,则不能调用 默认构造函数:

 

    Rectangle rectb;//OK,default constructor called

    Rectangle rectb();//oops,default costructor NOT called

 

这是因为,空括号()会使得 rectb 变为一个函数而不是一个对象。此时,rectb 成为了一个没有参数,返回值类型为 Rectangle 的一个函数。



posted on 2014-03-28 00:11  guozqzzu  阅读(842)  评论(0编辑  收藏  举报