C++之构造函数默认值设置方式
作者:ClassRoom706
这篇文章主要介绍了C++之构造函数默认值设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
C++构造函数默认值设置
构造函数默认值
C++类中构造函数设置默认值应当注意:
- C++类构造函数只能对排在最后的参数提供默认值;
- 既可以在构造函数的声明中,也可以在构造函数的实现中,提供缺省值,但,不能在两者同时提供缺省默认值。
代码:
#include <iostream> using namespace std; class CTest { public: CTest(); CTest(int _a, double _b, const bool _c = false, bool _d = true); private: const bool c; bool d; int a; double b; }; CTest::CTest(int _a, double _b = 1.0, const bool _c, bool _d):a(_a), b(_b), c(_c), d(_d) { cout << a << endl; cout << b << endl; cout << c << endl; cout << d << endl; } int main() { // CTest* test = new CTest(1, 1.0, true, false); // CTest* test = new CTest(1, 1.0, true); //CTest* test = new CTest(1, 1.0); CTest* test = new CTest(1); return 0; }
C++构造函数默认参数使用
一 代码
#include <iostream> using namespace std; class Box{ public: Box(int h=2,int w=2,int l=2);//在声明构造函数时指定默认参数 int volume(); private: int height,width,length; }; Box::Box(int h,int w,int len){//在定义函数时可以不指定默认参数 height=h; width=w; length=len; } int Box::volume(){ return height*width*length; } int main(){ Box box1(1);//不指定第2、3个实参 cout<<"box1's volume: "<<box1.volume()<<endl; Box box2(1,3);// 不指定第3个实参 cout<<"box2's volume: "<<box2.volume()<<endl; Box box3; cout<<"box3's volume:"<<box3.volume()<<endl; return 0; }
二 运行
[root@localhost charpter02]# ./0210 box1's volume: 4 box2's volume: 6 box3's volume:8
三 说明
该实战中,定义了一个带默认参数的构造函数,是在声明时指定默认参数,而定义时则可以不指定默认参数。定义对象时,可以传0~3个参数,传了几个参数,就替换前面的几个参数,其余都使用默认参数。
使用默认参数的好处在于:调用构造函数时就算没有提供参数也不会出错,且对每一个对象能有相同的初始化状态。
不过,应该在声明构造函数默认值时指定默认参数值,而不能只在定义构造函数时指定默认参数值。如果构造函数中的参数全指定了默认值,则在定义对象时,可给一个实参或多个实参,也可不给实参。
一个类中如果定义了全是默认参数的构造函数后,就不能再定义重载构造函数了。
假设Box类中定义了3个构造函数
Box(int =10,int=3,int=5); Box(); Box(int,int);
若有以下定义语句,则会出现问题
Box box1; //是应该调用第1个构造函数还是应该调用第2个构造函数 Box box2(13,18); //是应该调用第2个构造函数还是应该调用第3个构造函数
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。