2 构造函数
745字约2分钟
2023-07-17
2.1 inline 函数
定义类的时候,可以直接在body中定义函数(inline函数,在body中定义完成),也可以只是在body中声明函数
- inline内联函数:如果定义的函数是内联函数,那么会运行比较快,尽可能定义为内联函数
- 在body外,通过
inline
关键字来指定该函数为inline函数。
注意的是,上面所有的inline函数,都只是我们指定的,希望它为inline,具体是不是,要看编译器来决定
2.2 访问级别
数据应该被定义为private
函数要被外界使用,定义为public;若只是内部处理,定义为private
2.3 ctor 构造函数
2.3.1 ctor 的写法
方式一:(推荐)
complex(T r = 0, T i = 0) //函数名称与class的名称一致
: re(r), im(i) //中间这一行就是初始化
{ }
方式二:(不推荐)
complex(double r = 0, double i = 0)
{
re = r; im = i; //用赋值来进行初始化
}
通过构造函数来创建对象。会自动调用构造函数进行创建。
- 构造函数名称需要与类的名称一样
- 函数的参数可以有默认参数
- 构造函数没有返回类型
2.3.2 ctor/函数 重载
构造函数可以有很多个,可以重载;但是上面的1
2
两个构造函数冲突了
complex c2(); // "()" 可以不要,一样的
上面的调用方式对两个构造函数都适用,冲突
double real () const { return re; }
void real (double r) { re = r; } //不能有const
- 同名的函数可以有多个,编译器会编成不同的名称,实际调用哪个会根据哪个适用
2.3.3 ctor 放在 private 区
- 通常构造函数不要放在private中,这样外界没法调用,也就无法创建对象
- 在设计模式
Singleton
(单体)中,将构造函数放在了private中;这个class只有一份,外界想要调用的时候,只能使用定义的getinstance()
函数来取得这一份;外界无法创建新的对象
2.4 const 常量成员函数
对于不会改变数据内容的函数,一定要加上const。
{
const complex c1(2, 1);
cout << c1.real();
cout << c1.imag();
}
对于上面调用方式,我们创建一个常量复数然后调用函数输出实部虚部,如果上面real和imag函数定义的时候,没有加const,那么这里函数默认的意思是可能会改变数据,与我们的常量复数就矛盾了,编译器会报错;因此,对于不会改变数据内容的函数,一定一定要加const