第01讲 从结构到类的演变  

2.1 结构的演化

2.1.1 结构发生质的演变

函数与数据共存

  C++允许结构中定义函数,成为成员函数
  在结构中同时定义成员变量与成员函数
  使用格式:
  结构对象.成员变量
  结构对象.成员函数

1.函数与数据共存——结构的定义

  struct point
  {
   double x,y;
   void Setxy(double a, double b)
   { x=a; y=b;}
   void Display()
   { cout <  };
  第二章 从结构到类的演变 - 图1
  第二章 从结构到类的演变 - 图2
  运行结果
  第二章 从结构到类的演变 - 图3
  ·主函数
  第二章 从结构到类的演变 - 图4
  ·完整程序
  第二章 从结构到类的演变 - 图5
  修改后的程序
  第二章 从结构到类的演变 - 图6

2 封装性

  ·若定义结构体时,使用了private关键字,则产生封装性
  第二章 从结构到类的演变 - 图7
  ·使用了private关键字,则产生封装性
  第二章 从结构到类的演变 - 图8
  第二章 从结构到类的演变 - 图9
  ·在定义结构时,若使用了private则产生封装性,表示成员为私有的,只能在结构体内部通过公有成员函数使用。若未添加private则表示默认为public。
  ·类定义时默认为private

2.1.2 使用构造函数初始化结构的对象

  ·在定义结构时,与结构同名的函数称为构造函数。
  ·若定义的函数与某个已定义函数重名而参数类型或个数不同,则称为函数重载。
  第二章 从结构到类的演变 - 图10
  问题:哪个函数是构造函数?哪个函数被重载了?
  第二章 从结构到类的演变 - 图11
  注:构造函数在定义结构体对象时自动执行,
  并根据是否初始化来自动选择所调用的构造函数
  2.1.2 使用构造函数初始化结构的
  第二章 从结构到类的演变 - 图12
  第二章 从结构到类的演变 - 图13

2.2 从结构演化成一个简单的类

  将程序中struct替换为class即变为类的标准定义形式
  第二章 从结构到类的演变 - 图14
  类图的表示
  第二章 从结构到类的演变 - 图15

2.3 面向过程和面向对象

  简单了解对象的含义
  第二章 从结构到类的演变 - 图16
  第二章 从结构到类的演变 - 图17
  第二章 从结构到类的演变 - 图18
  ·面向过程 的求解步骤
  ·给出三角形三个顶点坐标,计算三边长,并输出
  ·步骤:输入x1,y1,x2,y2,x3,y3 六个数据
      ·计算(x1,y1)和(x2,y2)距离
      ·计算(x1,y1)和(x3,y3)距离
      ·计算(x2,y2)和(x3,y3)距离
      ·输出三个距离
  设计类
  将点设计为一个类,并提供
  相关的属性和操作
  第二章 从结构到类的演变 - 图19
  定义对象同时给出坐标
  point A(x1,y1)
  point B(x2,y2)
  point C(x3,y3)
  第二章 从结构到类的演变 - 图20
  计算距离并输出
  AB=A.GetLength(B);
  AC=A.GetLength(C);
  BC=B.GetLength(C);
  第二章 从结构到类的演变 - 图21
  计算距离并输出
  AB=A.GetLength(B);
  AC=A.GetLength(C);
  BC=B.GetLength(C);
  第二章 从结构到类的演变 - 图22

2.4 C++面向对象程序设计特点

2.4.1 对象

  三要素:对象名,属性,操作
  第二章 从结构到类的演变 - 图23

2.5 使用类和对象

2.5.1 使用string对象

  第二章 从结构到类的演变 - 图24
  第二章 从结构到类的演变 - 图25
  该类是C++语言中的内部预定义类,要在程序中使用该类时必须添加头文件
  #inculude
  类的初始化:string str1 =“A”;
        string str1 =‘A’;
        string str1 =‘AB’;
        string str1 =“AB”;
  可以以数组的形式使用str1对象中的字符串
  类的初始化:string str1 (“hello,”);
        string str2 =“world”;
  可以以数组的形式使用str1对象中的字符串
  str1[0]的值是h
  str2[0]的值是w
  第二章 从结构到类的演变 - 图26
  第二章 从结构到类的演变 - 图27
  运行结果
  第二章 从结构到类的演变 - 图28
  string对象允许使用 + 运算
  对象的方法(操作/成员函数):
  对象名.成员函数
  str1.size()
  String对象可使用+运算
  Str1=str2+str3
  若str2=“hello,” str3=“everyone”
  则str1的结果是?

2.5.2使用string对象的成员函数

  成员函数使用格式:对象名.成员函数
  例如:str1.size()
  若Str1=“everyone!”
  Str1.size()值为:9
  第二章 从结构到类的演变 - 图29
  成员函数使用格式:对象名.成员函数
  例如:str1.substr()
  若Str1=“everyone”
  Str1.substr(5,3)值为:“one”
  第二章 从结构到类的演变 - 图30
  C++中字符串中字符位置计数从0开始
  第二章 从结构到类的演变 - 图31
  成员函数使用格式:对象名.成员函数
  例如:str1.substr()
  第二章 从结构到类的演变 - 图32
  C++中字符串中字符位置计数从0开始
  成员函数使用格式:对象名.成员函数
  例如:str1.find(要查找的字符串,开始位置)
  结果为子串的位置
  第二章 从结构到类的演变 - 图33
  子串(one)的位置是5
  Press any key to continue
  getline函数的使用
  功能:利用cin函数输入一行字符串存入对象
  第二章 从结构到类的演变 - 图34
  Hello
  Str1的值是 hello
  Press any key to continue
  getline函数的使用
  功能:利用cin函数输入一行字符串存入对象
  例如:getline(cin,str1,’\n’)
  第二章 从结构到类的演变 - 图35
  Hello,everyoneR
  Str1的值是 hello,.everyone
  Press any key to continue
  简单应用:日期格式转换
  第二章 从结构到类的演变 - 图36
  请输入日期<形如4-25,2002>:
  4-25.2008
  转换前的日期为4-25,2008
  转换后的日期为 2008-4-25
  Press any key to continue

2.5.3使用complex对象

  complex类用于定义一个复数对象
  使用时添加头文件#include
  定义格式:complex num1(1,2);
  第二章 从结构到类的演变 - 图37

2.5.4使用对象小结

  使用标准类库中的类时,须添加头文件。
  使用string对象添加string头文件。
  添加头文件
  #include
  并使用标准命名空间
  using namespace std;
  使用标准类库中的类时,须添加头文件。
  定义对象方式同变量定义方式。
  定义对象时可对对象进行初始化。
  int i;
  string str1;
  定义时初始化:
  int i=1;或 int i(1);
  string str1=“hello”; 或 string str1(“hello”);
  使用标准类库中的类时,须添加头文件。
  定义对象方式同变量定义方式。
  同类的不同对象由对象名和属性来区分。具有相同的成员函数。
  string str1=“hello”;
  string str2(“everyone”);
  Cout<< str1.size()<  Cout <  不同类对象具有不同的成员函数可实现不同操作。
  Complex num1(1,2);
  String str1(“hello”);
  Cout<  Cout<  Cout<  使用标准类库中的类时,须添加头文件。
  定义对象方式同变量定义方式。
  定义对象时可对对象进行初始化。
  同类的不同对象由对象属性来区分。
  不同类对象具有不同的成员函数可实现不同操作。
  类是具有相同特征和操作的对象的抽象。

2.6 string对象数组与泛型算法