第二部分思维导图PDF下载C++程序设计 第二章 从结构到类的演变

2.1 结构的演化

  • 2.1.1结构发生质的演变
      1. 函数与数据共存
      • 通过C++的结构对象使用成员函数 结构对象.成员函数
      • struct 结构名 { 数据成员 成员函数 };
      • C++首先允许结构中可以定义函数,这些函数称为成员函数
      • 类是从结构演变而来的,开始称为“带类的C”,这种演变就是让结构含有函数开始的。
      1. 封装性
      • 如果在定义结构式,将数据成员使用private关键字定义,则产生封装性
      • 没有使用private定义的成员函数,默认为public
  • 2.1.2使用构造函数初始化结构的对象
    • 构造函数专门用于初始化对象
    • 构造函数名字一般等于类名,一般形式为 :构造函数名 对象名 (初始化参数)

2.2 从结构演变一个简单的类

其实,使用关键字class 代替 struct, 就是一个标准的类

2.3 面向过程与面向对象

C语言是典型的面向过程的一种语言,还是结构化程序设计语言,它的程序设计特点就是函数设计。相互隔离的程序设计方法就是模块化程序设计方法。

C++ 是混合型语言,可以使用C++编译器所提供的对象,也称呼为“带类的C”

世界万物皆对象

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

2.4.1 对象

  • C++可使用对象名、属性和操作三要素来描述对象。一个对象由一组属性和对这组属性进行操作的成员函数构成。

2.4.2 抽象和类

  • 抽象是从一种一般的观点看待事物的方法,即集中于事物的本质特征,而不是具体细节或具体实现。
  • 类是具有相同的属性和操作的一组对象集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分。
  • 类的作用是定义对象,类给出了该类的全部对象的抽象定义,而对象则是符合这种定义的实体。
  • C++中,每个操作是一个“成员函数”

2.4.3 封装

  • 封装就是把对象的属性和操作结合成一个独立的系统单位,并尽可能的隐蔽对象的内部细节。在类中,封装是通过存取权限实现的,例如public和private

2.4.4 继承

  • 继承是一个类可以获得另一个类的特性的机制。

2.4.5 多态性

  • 不同的对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为多态性。

2.5 使用类和对象

2.5.1 使用string对象

  • 需包含头文件,#include
  • string初始化时需要的是双引号括起来的字符串或字符常量,而不是单引号括起来的单个字符常量。
  • 两种初始化方法,例如
    • string str1(“We are here!”);
    • string str1 = “We are here”;
  • 对象使用自己的成员函数的方法时通过“.”运算符,如
    • 对象名 . 成员函数
  • string 可使用+ 运算符将两个字符串连接起来组成一个新的字符串,也可以与单个字符串常量相加。例如:
    • str1 = str1 + ‘ ’ + str1;

2.5.2 使用string类的典型成员函数实例

  • 对象调用成员函数的语法
    • 对象名称.成员函数(参数(可供选择的消息内容))
  • substr成员函数,用来返回字符串的子串,第一个参数是要截取字串在字符串的位置,第二个参数是截取的长度。如果长度大于字符串长度,自动截取到末尾。
    • string str1 = str1.substr(3, 3);
  • find成员函数用来在主串中检索所需字符串,有两个参数,格式为:对象名称.find(要查找的字符串,开始查找的位置) 返回值为查询内容在主串的位置。如果不给位置参数,默认参数位置为0.
    • int i = str1.find(“are”, 2);
    • int i = str1.find(“are”);
  • getline从流cin中读出输入的一行给string 类的对象,例如
    • srting InputLine;
    • getline(cin, InputLine, ‘\n’);
    • cout << "your input:" << InputLine << endl;

2.5.3 使用complex对象

  • C++ 标准程序库提供complex类定义复数对象,须包含头文件,复数需要两个初始值,实部和虚部。它是一个模板类。
    • complex <数据类型> 对象名 (实部值,虚部值)
      • complex num1(2,3);
      • complex num2(3.5, 4.5);
    • complex的real和imag成员函数用来输出对象的实部和虚部的值,如
      • cout << num2.real() << ',' << num2.imag() << endl;

2.5.4 使用对象小结

  • 标准库提供的类都是经过抽象,代表了一类对象,如果使用对象的成员函数,需要用”.“运算符。定义复数类时与数据成员的类型无关,当定义复数类的对象时才指定实部和虚部的数据类型。
  • 类是抽象出一类事物的共同特征,模板则是归纳出不同的类型事物的共同操作。

2.6 string对象数组与泛型算法

第一章中的泛型算法同样适合string类,另不要混淆泛型算法的find函数和string本身的find成员函数混淆,前者说白了是指针,即内存位置搜索,后者为字符搜索。

swap成员函数,用来交换2个对象的属性

  • str1.swap(str2)
  • str2.swap(str1)

string类有一对用来指示其元素位置的基本成员函数:指示第一个元素的begin()和最后一个元素的end()

使用string定义的字符串中不用字符‘\0’作为结束符,使用char定义的字符串则自动在尾部加入’\0’作为结束符

最后修改日期:十一月 5, 2019

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。