头文件写法
#防卫式声明
#ifndef _COMPLEX_ //如果没有定义这个‘_COMPLEX_’
#define _COMPLEX_ //如果没有定义这个‘_COMPLEX_’ ,则定义这个‘_COMPLEX_’
//第一次include 就会定义这个_COMPLEX_
//第二次再include时,这个_COMPLEX_被定义过了,不会进入到主体,也就不会重复include
···
···
#endif
自己写的头文件用#include “name”
即用双引号引用
类模板
如果是这样 那么re,im
就被写死了,这好吗?这不好。
如果需要一个float类型或者整型类型的话难到要重新写一个类吗?
这时候就用到类模板,不把变量类型写死
所以这样
那么我们使用时只需这样
complex<double> c1(2.5,1.5)
re,im
就是double
型
complex<int> c2(2,6)
re,im
就是int
型
inline(内联)函数
-
定义
- 定义在class里的函数
-
优点
- 速度快
- 有宏的特性,没有宏的缺点
-
缺点
- 过于复杂的inline func不会被编译器定义成inline
构造函数
- 特别之处
- 函数名称和类的名称相同
- 没有返回类型,也不需要有
- 构造函数就是用来创建对象的
- 创建对象时构造函数会被自然而然调用起来
- 初值列(见图) 要好好利用 (构造函数的特殊语法)
参数传递
- 尽量用引用
- 如果不想传进去的参数被修改,加
const
- 如果不想传进去的参数被修改,加
友元(friends)
- 友元可以调用Private
- 相同的class互为友元
c2
通过func
直接访问c1
的re im
成员函数
- 任何一个成员函数都有一个隐藏的this指针
- this指针指向这个调用者 ,即谁调用,指向谁