更多课程 选择中心

C/C++培训
达内IT学院

400-111-8989

C++编程语言“类”知识点总结

  • 发布:C++培训
  • 来源:学习笔记
  • 时间:2017-07-06 15:51

类的概念

类是一个东西,类似于一个市场,
市场提供了各种各样的食物,
你需要鱼,就在这边买鱼,
你需要肉,就在那边买肉,
你需要菜,就在前边买菜。
你不知道他们的菜是怎么来的(看不见)
你不知道他们的猪是什么猪种(看不见)
你不知道他们的鱼是哪个海的(看不见)
在这里,你是用户,市场是一个类,
卖鱼,卖肉,卖菜,是接口
你能通过这些接口买到你需要的食物,
却不知道这些食物的实际生产过程(实现过程),简称实现。


类是什么

类的思想就是把数据抽象化并进行封装。
1. 数据抽象: 数据抽象就是把接口和实现两个东西进行分离
 A. 接口: 提供给用户使用的,即用户能够进行的动作。
 B. 实现: 是接口动作的实际运行过程。
2. 封装: 封装把实现过程进行组装从而隐藏了细节,只留下接口以供用户使用。


例子1: QQ

你可以通过输入 QQ 号来添加一个好友,
却不知道在这个添加的过程做了些什么。
你可以通过聊天窗口向好友发送信息,
却不知道这消息是如何传送给好友的。

例子2:

你知道 std:: << 20;这句代码会输出20,
却不知道这句代码是怎么输出到屏幕。
你知道 strlen (str);调用能返回str长度,
却不知道 strlen (str);如何计算出长度。

ok,理解了类我就可以继续了。

结构体

可以说,类是结构体的一个变形版本。
要明白类是怎么回事,得先弄清楚结构体是什么。

1 . 结构体组成
为了让你理解类,我们只了解结构体的一种形式。
相信我,形式不重要,只要你理解了原理,
形式就轻而易举。
结构体由 struct 关键字后紧跟一个名字(随意命名,有时可以没有)再接一个由 {包含的成员}。
结构体的出现,是为了把实际的东西抽象化为代码来进行操作,例如:

struct Personal     // 结构 {  char Name[20];   // 名字  int Old;         // 年龄 };

以上,为了与结构体的内容相符合,我把结构体命名为Personal(个人),其意义代表个人信息的意思。

Name 用于保存一个人的名字,
Old 则用于保存一个人的年龄。

一个 Personal 就是一个人,并带有两项信息分别是名字和年龄。

我们可以声明一个结构变量来保存 小明的信息
Personal Xiaoming; // 小明的个人信息

我们还可以再声明一个结构变量来保存小红的信息。
Personal Xiaohong;// 小红的个人信息

我们知道,一个Personal 就包含两个信息,名字和年龄,因此用 Personal 声明的变量Xiaoming 和 Xiaohong 也分别包含这两项信息。类似于我们用 int 声明一个变量 a int a;,左边是类型,右边是变量,类型规定了变量会保存什么样的值。
而在这里

变量 a 会保存一个整数且只能是整数
变量 Xiaoming 保存一个名字和一个年龄。
变量 Xiaohong 保存一个名字和一个年龄。

假设小明是哥哥,小红是妹妹,
他们与爸爸妈妈共同组成一个家庭,例如:

struct Family       // 家庭 {  Personal Father;  //爸爸,包含名字和年龄  Personal Mother;  //妈妈,包含名字和年龄  Personal Brother  //哥哥,包含名字和年龄  Personal Sister;  //妹妹,包含名字和年龄 }

Family(家庭的意思),一个 Family 就代表一个家庭。
例如: Family Xmfamily; // 小明的家庭
我们看到,这个家庭包含了四个成员分别是: 爸爸,妈妈,哥哥,妹妹,每个成员(Personal)分别包含两项信息,名字 和 年龄。


同样的结构还能保存不同的家庭,只要家里的所有成员是 4人,
例如:Family Me; // 这是我的家庭成员。
另外你可以根据需要,添加 Personal 结构体的成员,
例如: 不止是名字和年龄,还能增加身高,学历等个人信息。

struct Personal {  char Name [20];    // 名字  int Old;           // 年龄  double Height;      // 身高  char Education[20]; // 学历 };

而 Family 结构体也可以增加更多成员,以符合一个家庭有多人的情况,甚至包括已经结婚的人的子女等。但这样未免有些过于复杂,你可以先在这里暂缓一下。理清一下思路,然后我们再继续开始。

2 . 访问成员
知道了结构体是怎么回事,我们还得研究一下如何访问成员。
假设我们现在要去小明家询问小明的名字和年龄
首先我们应该去小明家(Xmfamily),
即 Xmfamily// 小明的家
到他家后访问小明这个人,我们知道小明是哥哥。
即 Xmfamily.Brother; // 这个家的哥哥成员
现在我们问哥哥的名字叫什么
即 Xmfamily.Brother.Name; //这个哥哥成员的名字
接着我们再问哥哥的年龄是多少
即 Xmfamily.Brother.Old; // 哥哥成员的年龄


由于这里是我们假设出了小明这个人,
实际中如果真的存在小明这个人的话,
我们应该事先给它保存信息,
例如:小明去年是 14岁,真名叫王明,

Xmfamily.Brother.Name = "王明"; Xmfamily.Brother.Old = 14;

在今年小明是 15岁了,我们应该为我们的程序在每年的年龄上增加 1,
Xmfamily.Brother.Old +=1 ;
更好的增加年龄的方式是使用自加(++)运算符,但这里只为了让你容易理解。

因此,在访问成员时就可对其进行取值,同时也可以对其进行赋值。而整个访问方式采用符号 . 来访问每个成员,包括每个成员的嵌套成员。

例如: Xmfamily.Sister

这里 Sister 是 Xmfamily 里的一个直接成员。

例如: Xmfamily.Sister.Old

这里,Old 是 Sister 的直接成员,
Sister 又是 Xmfamily 的直接成员
因此 Old 是 Xmfamily 的嵌套成员。

这便是结构里的结构。

即一个 Family 结构体里面的每个成员又包含了另一个结构 Personal ,
而 Personal 结构里又包含两个成员,分别是 Name 和 Old!我们知道 Name 和 Old 前面的类型不是结构类型,而只是简单的 char(字符类型)和 int(整数类型),这两个仅仅是一个单数据类型。


当我们使用结构来作为另一个结构的成员时

struct Family {  Personal A;  // 成员A包含两项数据 };

如果它被展开则是这样

struct Family {  Personal A // 成员 A 包含以下两项数据  {    char Name[20]; // 一个名字    int Old;      // 一个年龄  }; };

如果你此时用 Personal 又声明了一个 B,
那么 B 又是一个 Personal 结构也包含两个成员。
所以,A 和 B 之间是相互独立的,
你不会因为给 A 修改年龄,而作用到 B 的年龄上去。
以下给出 A 和 B 成员是如何相互独立的:

struct Family {  Personal A   // 成员 A 包含两项数据  {    char Name[20];//一个名字    int Old;     //一个年龄  };  Personal B  // 成员 B 包含两项数据  {    char Name[20];  // 一个名字    int Old;        // 一个年龄  }; };

假设使用 Family 声明了一个结构变量
Family item;
我们保存一本书的页数信息作为 A 成员

item.A.Name = "《语文》" // 一本语文课本 item.A.Old = 200;      // 200 页

此时在结构体内相当于发生了这样的事情

struct Family {  Personal A  // 成员 A  {    char Name[20]= "《语文》";    int Old=200; // 书有 200 页  };  Personal B  // 成员 B  {    char Name[20];    int Old;  }; };

A 成员被赋值,而 B 成员没有任何改变,
如果 B 成员是保存数学书的页数,就依然是数学书和它的页数。
虽然 A 和 B 有相同的结构,但是 A 和 B 之间是相互独立的各自的结构。
这跟 int a=20; int b=0; 一样,
你保存在 a 的整数 20 不可能跑到 b 去。
虽然 C语言有指针 和C++ 有引用跟指针可以提供类似的功能。但,不是真正的跑过去,a 还是 a,b 还是 b 的值。


为了便于让你理解我省去了细节部分,所以以上代码不可直接编译,除非你懂结构。否则直接复制粘贴编译时将会有错误信息。
这一部分是重点,理解了结构,类就不在话下,类只是增加一系列扩展将结构发挥到极致。C++中把结构说成类,虽然类有自己的特性,但也是以结构体为思路。

成员

在上面结构中,共同组成一个结构的所有变量,我们称之为结构体的成员。
类的成员与此相同。
在我们介绍下面一些类的特性之前,我们再讨论一遍结构体自己的特性。

成员函数

成员函数是类的一个特性。

this 指针

在类中引入 this 指针,这是类的另一个特性

常量成员函数

由 this 指针,引出了常量的成员函数,又是一个特性

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C语言三种算法求解
下一篇:初识C语言,C语言入门基础知识总结

C语言创建windows窗口实例

C++回调函数是什么?

C++ shared_ptr和动态数组

C语言有哪些关键词,C语言44个关键词大全

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省