007.C++构造函数
正文
1.一个引例
//class head class complex //class body {} { public: complex(double r=0, double i) :re(r), im(i) {}//构造函数 complex& operator += (const complex&); double real() const { return re; }//获取实部的函数 double imag() const { return im; }//获取虚部的函数 private: double re, im; friend complex& __doapl(complex*, const complex&); };
2.构造函数的特点
- 构造函数名称与类名相同;
- 没有任何返回值类型,因为不需要;
- 可以用初始列的方式定义默认实参;
3.初始列定义构造函数默认实参
注意,一般的函数也是可以定义默认实参的,以下就是一个通用的方式
1 2 | complex ( double r = 0, dobule i = 0) { re = r; im = i;} //赋值语句 |
然而,上面的方式效率不是最高的。一般地,数据处理有两个阶段,即“初始化”和“赋值”,上面的方式直接跳过了阶段一,效率偏低。
对于构造函数,可以使用初始列(初值列)的方式来定义默认实参,充分利用这种特殊性。
1 2 3 | complex ( double r = 0, double i = 0) : re(r), im(i) //初值列 {} |
4.构造函数的调用
4.1设定了默认实参
#include <iostream> using namespace std; class complex //class body {} { public: complex(double r = 0, double i = 0) :re(r), im(i) {}//构造函数 complex& operator += (const complex&); double real() const { return re; }//获取实部的函数 double imag() const { return im; }//获取虚部的函数 private: double re, im; friend complex& __doapl(complex*, const complex&); }; int main() { complex c1(2, 1); //方法一:传递两个参数 complex c2; //方法二:不传递参数,因为有设定默认参数 cout << "c1=" << c1.real() << "+" << c1.imag() << "i" << endl; cout << "c2=" << c2.real() << "+" << c2.imag() << "i" << endl; return 0; }
4.2 未设定默认实参
此时,只支持方法一调用,不支持方法二调用。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步