核心

C++的类就是对C语言的结构体进行了扩展,C++的结构体可以包含函数!

------------------------------------------------------

我们学习C++为什么要复习C语言结构体呢?

在我看过的对C++进行讲述的教材中,开篇往往是两个字“对象”!因为C语言是面向过程的,而C++特色是面向对象!所以大多数书籍最开始就在说面向对象的事情。

但我在最初学习的过程中发现自己对“对象”这个词汇....总是想偏,对这个词汇云里雾里的,什么叫面向对象啊,看了一通没看懂。所以我们先不深究什么叫面向对象。

我们先来略看一下C语言中的结构体。对于这个大家应该是很熟悉的,如果对C语言结构体的概念有模糊,请自行查阅资料。

-----------------------------------------------------

C语言结构体

在C语言编程中,我们定义自己的身高,可以用整型int变量,定义一家人(比如三口人)的身高,可以用int型数组。

如果我们要表示某个游戏中各个角色的姓名、身高(单位cm)、体重(单位kg),这三种并不是同一类型的数据,那我们就用到结构体了。

struct hero

{

unsigned char name[10];

int height;

float weight;

};

struct hero LuBan; //定义“LuBan”变量

结构体或称结构,就像int、float等基本类型一样,也是一种数据类型,使用户自己定义的,它允许存储不同类型的数据项,就像上面的hero结构体。就像打包封装,把一些有共同特征(上面的身高体重等都属于同一个角色)的变量封装到内部,通过一定的方法访问和修改这些内部变量。

关于更多的结构体的知识我们这里不多说。

我们在结构体内部定义了一些变量,看到“LuBan”这个结构,我们就能查找到他的身高、体重等数据。

----------------------------------------------------

函数

LuBan角色具有“河豚手雷”这个技能,就像炒菜一样,油、盐、菜、蛋...出锅!这样一个顺序就完成了一道美食,LuBan也是用一个顺序完成了这个技能。左闪、右躲...杀!

这就是一个函数。

一个变量定义了一个角色的角色性质,一个函数定义了一个角色的大招使用过程!所以C语言的面向过程很好理解。

这个LuBan我们就可以叫做一个对象!他的身高、体重等这些变量我们称之为“属性”或者“状态”,他具有的大招(能干什么)我们称之为“行为”。

就像LuBan,这个角色有姓名、性别、身高、体重等这些“数量”,也就是变量=属性=状态;他可以吃饭、睡觉、打怪,这些行为=函数。所以,我们就叫C语言中的变量为“属性”或“状态”,C语言中的函数称为“行为”。

------------------------------------------------------

结构到类

在C语言的结构体定义中,我们只是把变量放到了结构体中,而C++的类就是对C语言的结构体进行了扩展,C++的结构体可以包含函数!

举个栗子:

struct hero

{

//属性

unsigned char name[10];

int height;

float weight;

//行为

void eat()

{吃肉!}       //仅做说明

void sleep()

{站着睡!}

void KillMonsters()

{使用河豚手雷打怪!}

};  //分号

struct hero LuBan; //定义“LuBan”变量

调用:

void main()

{

LuBan.height=150;

LuBan.weight=50;

LuBan.KillMonsters();

}

“角色”这个结构体的成员,与C语言不同,我们既有变量也有函数,变量和函数都属于该结构体,变量叫成员变量,函数叫成员函数。C语言的结构智能描述一个对象的属性,不能描述一个对象的行为。

在面向对象的程序设计中,对象具有属性(状态)和行为,属性保存在成员变量中,行为通过成员方法(函数)来实现。成员方法又是什么?

其实方法和函数可以理解为一回事。只是在C++中“函数”被称之为“方法”。

-----------------------------------------------------

C++类的定义

前面看明白了,这个地方就不多说话!

结构体定义中的关键字struct换成class,就得到了C++中类的定义。

class Hero    //类名习惯首字母大写

{

//属性

unsigned char name[10];

int height;

float weight;

//行为

void eat()

{吃肉!}       //仅做说明

void sleep()

{站着睡!}

void KillMonsters()

{使用河豚手雷打怪!}

};  //分号

类定义的就叫对象。

Hero LuBan; //定义了一个Hero类的对象LuBan

C++笔记004:C++类通俗点说的更多相关文章

  1. TJI读书笔记10-复用类

    TJI读书笔记10-复用类 组合语法 继承语法 代理 final关键字 final的数据 final的参数 final的方法 final的类 初始化和类的加载 乱七八糟不知道怎么归类的知识点 代码复用 ...

  2. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  3. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  4. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  5. 笔记-python-lib-requests常用类/方法/属性

    笔记-python-lib-requests常用类/方法/属性 1.      requests模块常用类/方法/属性 在使用中发现对requests模块不够熟悉,写了几个案例后重新整理了一下文档,罗 ...

  6. 深度学习Keras框架笔记之AutoEncoder类

    深度学习Keras框架笔记之AutoEncoder类使用笔记 keras.layers.core.AutoEncoder(encoder, decoder,output_reconstruction= ...

  7. 深度学习Keras框架笔记之TimeDistributedDense类

    深度学习Keras框架笔记之TimeDistributedDense类使用方法笔记 例: keras.layers.core.TimeDistributedDense(output_dim,init= ...

  8. 深度学习Keras框架笔记之Dense类(标准的一维全连接层)

    深度学习Keras框架笔记之Dense类(标准的一维全连接层) 例: keras.layers.core.Dense(output_dim,init='glorot_uniform', activat ...

  9. 运维开发笔记整理-基于类的视图(CBV)

    运维开发笔记整理-基于类的视图(CBV) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.FBV与CBV 1>.什么是FBV FBC(function base views ...

  10. JDK1.8源码阅读笔记(1)Object类

    JDK1.8源码阅读笔记(1)Object类 ​ Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀ ...

随机推荐

  1. Javascript 判断传入的两个数组是否相似

    任务描述: 请在index.html文件中,编写arraysSimilar函数,实现判断传入的两个数组是否相似.具体需求: 1. 数组中的成员类型相同,顺序可以不同.例如[1, true] 与 [fa ...

  2. PDF之pdfkit

    说起pdf就想到了一款很适用的工具,那就是pdfkit,在前几天的项目中,有一个功能要实现,为了实现这一个功能,于是我大海茫茫中查询各种百科,不负众望的让我找到了我心怡的工具,想必也就是它了.好了废话 ...

  3. hdu 6205 card card card

    https://vjudge.net/contest/184514#problem/L题意:排成一行的一堆牌,每堆牌都有一定数量的牌,然后每堆牌对应有一个惩罚值.一开始所有的牌都是正面向下的,并且在游 ...

  4. pandas笔记

    axis = 1表示按列的方向遍历 axis = 0表示按行的方向遍历 Usually axis=0 is said to be "column-wise" (and axis=1 ...

  5. [转]linux如何修改文件或目录的权限(chmod)

    linux如何修改文件或目录的权限(chmod) chmod命令是linux上用于改变权限的命令,-R 是递归遍历子目录,因为你要操作的文件使用的*通配符.777,第一个7代表文件所属者的权限,第二个 ...

  6. 基于angularJS搭建的管理系统

    前言 angularJS搭建的系统,是一年前用的技术栈,有些地方比较过时,这里只是介绍实现思路 前端架构 工程目录 项目浅析 项目依赖包配置package.json { "name" ...

  7. Python处理Excel生成CSV文档

    Python是一种解释型的.动态数据类型的.面向对象的高级程序设计语言.拥有丰富的处理数据和文本类库,并且得益于它是一种解释型的语言,在程序修改和功能扩展上,可以很容易做到大规模的调整.综合考虑Pyt ...

  8. python3全栈开发- 元类metaclass(面试必考题)

    一.知识储备 #exec:三个参数 #参数一:字符串形式的命令 #参数二:全局作用域(字典形式),如果不指定,默认为globals() #参数三:局部作用域(字典形式),如果不指定,默认为locals ...

  9. 原生nodejs在线聊天系统

    前端自动化由来已久,最近为了编写自己的自动化工具,本人开始详细学习node,为了检验学习成果,决定编写一个类似于webqq的聊天系统.以下是该系统具有的模块. 登录模块(自动登录) 聊天模块(私聊,群 ...

  10. 初学servlet之form表单

    使用doget向页面写表单,使用dopost读取表单内容,包括了单选按钮,复选框,下拉列表等等的读取方法,form的action属性不写,默认表单会被提交给请求他时用的相同的URL package a ...