#ifndef COMPLEX_H_
#define COMPLEX_H_
class complex{
private:
double re, im;
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;}
friend complex& _doap1 (complex*, const complex&);
};
#endif // COMPLEX_H_
内联函数 (inline)
函数如果在class body中定义完成,那么就会成为incline函数候选者
double real () const {return re;}
建议:因为上一条的原因,最好将内联函数的定义放在头文件里。
访问级别
构造函数
complex (double r = 0, double i = 0) // 默认实参
: re (r), im (i) // initialization list 这种写法更高效 这里是初始化 后面是赋值
{
} // 构造函数
int main() {
complex c1(2, 1);
complex c2;
complex *p = new complex(4);
}
析构函数
不带指针的类大部分不需要析构函数
将构造函数放到
private
区域中
class A {
public:
static A& getInstance();
void setup();
private:
A();
A(const A& rhs);
};
A& A::getInstance() {
static A a;
return a;
}
A::getInstance.setup();
const
不改变类内的数据的时候,应该+ const
double real () const {return re;}
double imag () const {return im;}
如果不加 const 的话
double real () {return re;}
double imag () {return im;}
如果使用者这样使用
int main() {
const complex c(2, 1);
cout << c.reaol();
cout << c.imag();
}
就会这样报错
main.cpp: 在函数‘int main(int, char**)’中:
main.cpp:8:18: 错误:passing ‘const complex’ as ‘this’ argument discards qualifiers [$
rg/onlinedocs/gcc/Warning-Options.html#index-fpermissive-fpermissive]
8 | cout << c1.real();
| ~~~~~~~^~
In file included from main.cpp:2:
complex.h:12:10: 附注:在调用‘double complex::real()’时
12 | double real () {
return re;}
| ^~~~
参数传递
值传递
尽量不要传递值
引用传递
传引用相当于传指针,但是更加优雅
complex& complex::operator += (const complex& x);