构造函数重载(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 的一个函数。



你可能感兴趣的:(Constructor)