侯捷C++面向对象编程(上)课程打卡 Day1

1、头文件与类的声明

1.1 C vs C++

img

C语言中,Data和函数是分别定义,根据类型创建的。这样建立的变量为全局变量。

C++中,将Data和函数包含在一起形成类。使用类实例化出一个对象,即为面向对象。类中的数据和函数都是局部的,不是全局的。

class分类:

  • 无指针成员的类
  • 有指针成员的类
1.2 头文件与类
1.2.1头文件

引用自己编写的头文件使用双引号。

写法如下:

img

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 模板初识

img

{
    complex<double> c1(2.5, 1.5);
    complex<int> c2(2, 6);
    ...
}
  • 因为实部和虚部的类型不确定,可能是 double float int,定义一个模板类型叫做 T
  • T作为一个类型参数来传入,在调用的时候就可以指定类型了
  • 通过在定义类的前面加入一行代码 template<typename T> 来实现