侯捷C++面向对象编程(上)课程打卡 Day1
1、头文件与类的声明
1.1 C vs C++
C语言中,Data和函数是分别定义,根据类型创建的。这样建立的变量为全局变量。
C++中,将Data和函数包含在一起形成类。使用类实例化出一个对象,即为面向对象。类中的数据和函数都是局部的,不是全局的。
class分类:
- 无指针成员的类
- 有指针成员的类
1.2 头文件与类
1.2.1头文件
引用自己编写的头文件使用双引号。
写法如下:
1处是要写类的声明,2是要写类的具体定义,写1、2的时候发现有些东西需要提前进行声明,就写在0处。
complex.h:
#ifndef _complex_ //防卫式声明,如果没有定义过,那就定义一下。ifndef+define。
#define _complex_//如果程序第一次引用,则进行定义,后续不需要重复定义,不需要重复进入下面的过程
#include <cmath>
class ostream;
class complex;
complex&
_doapl(complex* this ,const complex& r);
class complex
{
。。。
};
complex::function...
#endif
1.2.2 class的声明
在C++中,struct和class的唯一区别在于默认访问权限不同:
- struct默认权限为公共
- class默认权限为私有
class complex
{
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&);
}
1.2.3 模板初识
{
complex<double> c1(2.5, 1.5);
complex<int> c2(2, 6);
...
}
- 因为实部和虚部的类型不确定,可能是
double
float
int
,定义一个模板类型叫做T
- 将
T
作为一个类型参数来传入,在调用的时候就可以指定类型了 - 通过在定义类的前面加入一行代码
template<typename T>
来实现