1 头文件与类的声明
1.1 c vs cpp关于数据和函数
![](https://raw.githubusercontent.com/PLUS-WAVE/blog-image/master/img/2023-07-13-20-02-37-image.png)
c语言中,data和函数都是分别定义,根据类型创建的。这样创建出的变量,是全局的
cpp中,将数据data和函数都包含在一起(class),创建出一个对象,即为面向对象;数据和函数(类的方法)都是局部的,不是全局的
class的两个经典分类:
- 无指针成员的类(complex)——复数
- 有指针成员的类(string)——字符串
1.2 头文件与类
1.2.1 头文件
引用自己写的头文件,用双引号
头文件的标准写法:
![](https://i-blog.csdnimg.cn/blog_migrate/4f6701599480e40344431f500f58b47c.png)
complex.h:
#ifndef _COMPLEX_ // 如果没有被定义过就定义 (防卫式声明)
#define _COMPLEX_
#endif
- 首先是防卫式声明,如果没定义这个名词,那么就定义一下。ifndef+define。(这样如果程序是第一次引用它,则定义,后续则不需要重复定义,不需要重复进入下面的过程)
1
要写的类的声明,2
是要写类的具体定义,写1
2
的时候发现有一些东西需要提前声明,写在0
处
1.2.2 class的声明
在C++中 struct和class唯一的区别就在于默认的访问权限不同
- struct 默认权限为公共
- class 默认权限为私有
class complex //class head
{ //class body /*有些函数直接在此定义,另一些在 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&);
};
{
complex c1(2,1);
complex c2;
...
}
1.2.3 模板初识
![](https://raw.githubusercontent.com/PLUS-WAVE/blog-image/master/img/xQKbWalLFc9NsEo.png)
{
complex<double> c1(2.5, 1.5);
complex<int> c2(2, 6);
...
}
- 因为实部和虚部的类型不确定,可能是
double
float
int
,定义一个模板类型叫做T
- 将
T
作为一个类型参数来传入,在调用的时候就可以指定类型了 - 通过在定义类的前面加入一行代码
template<typename T>
来实现