6. 一个参数的构造函数
在 C++ 语言中,当创建一个对象时并且为其赋值一个初始值,则会调用具有一个参数的构造函数。
如下面的代码
Rectangle r3 = 100;
则会尝试调用 Rectangle(const int & xxx) 这样的构造函数,当然我们的示例中没有一个整数参数的构造函数则创建对象会出错。
示例
下面我们定义一个正方形类 Square 类来说明这样一个问题。
#include <iostream>
using namespace std;
class Square {
public:
Square(int l=1) {
cout << "构造函数 Square(int) 被调用!" << endl;
length = l;
}
Square(double l) {
cout << "构造函数 Square(double) 被调用!" << endl;
length = l;
}
double get_length(void) {
return length * 2;
}
private:
double length;
};
当我们使用 Square 类创建对象时使用不同的创建方法则调用不同的构造函数。如下所示。
Square s1; // 调用无参的构造函数
Square s2(100); // 调用构造函数Square(int)
Square s3(1.2); // 调用构造函数Square(double)
Square s4 = 200; // 调用构造函数Square(int)
Square s5 = 3.4; // 调用构造函数Square(double)
完整的示例代码如下:
// filename: constructor1.cpp
#include <iostream>
using namespace std;
class Square {
public:
Square(int l=1) {
cout << "构造函数 Square(int) 被调用!" << endl;
length = l;
}
Square(double l) {
cout << "构造函数 Square(double) 被调用!" << endl;
length = l;
}
double get_length(void) {
return length * 2;
}
private:
double length;
};
int main(int argc, char * argv[]) {
Square s1; // 调用无参的构造函数
Square s2(100); // 调用构造函数Square(int)
Square s3(1.2); // 调用构造函数Square(double)
Square s4 = 200; // 调用构造函数Square(int)
Square s5 = 3.4; // 调用构造函数Square(double)
cout << "s1的周长:" << s1.get_length() << endl;
cout << "s2的周长:" << s2.get_length() << endl;
cout << "s3的周长:" << s3.get_length() << endl;
cout << "s4的周长:" << s4.get_length() << endl;
cout << "s5的周长:" << s5.get_length() << endl;
return 0;
}
编译和运行结果如下:
weimz@mzstudio:~$ g++ -o constructor1 constructor1.cpp
weimz@mzstudio:~$ ./constructor1
构造函数 Square(int) 被调用!
构造函数 Square(int) 被调用!
构造函数 Square(double) 被调用!
构造函数 Square(int) 被调用!
构造函数 Square(double) 被调用!
s1的周长:2
s2的周长:200
s3的周长:2.4
s4的周长:400
s5的周长:6.8
实验
验证一个参数的构造函数的编写和调用规则。