6.C++初步分析类
面向对象的意义在于:
- -将日常生活中习惯的思维方式引入程序设计中
- -将需求中的慨念直观的映射到解决方案中
- -以模块为中心构建可复用的软件系统
- -提高软件产品的可维护性和可扩展性
其中类和对象是面向对象中的两个基本概念
-类:指的一类事物,里面包括不同对象实体,是一个抽象的概念,比如:程序语言
-对象:指的是类里的具体实体,比如:程序语言(类)->java(对象)、C#(对象)等
类
-类用于抽象的描述一类事物所共有的属性和行为
比如:
电脑,都拥有CPU/主板/内存/硬盘(共有属性),并且可以运行程序(共有行为)
对象
-对象指类里的具体事物,并且拥有描述类中的一切共有属性和行为
比如:
神舟电脑G50-F5型号,CPU是酷睿i5,内存8G,硬盘1TB等
神舟电脑G60-F7型号,CPU是酷睿i7,内存16G,硬盘1TB+128GB(固态硬盘)等
总结:
- 类下面不一定存在实际对象,比如:恐龙(类),对象已经灭绝,没有一个对象
- 类的对象数目不确定,比如:电脑(类),该对象数目不确定,美国总统(类),该对象当今只有一个
- 类不一定都来源于现实生活.
- 类不是独立的,类与类之间也存在关系,比如:电脑(类)包括了CPU(类),主板(类)等,
- 对象不一定只属于一个类,比如:二哈(对象),既属于哺乳动物(类),又属于犬科(类)
类与类之间的关系
继承
-父类和子类之间具有继承关系,比如:车(父类)包括了汽车(子类)
可以这么理解,汽车一定是车,但是车不一定是汽车
-继承的子类拥有父类的所有属性和行为
组合
-一些类的存在必须依赖于其它的类,这种关系叫组合,比如:电脑(类)包括了CPU(类)等
-组合的类在某个局部上由其它的类组成
继承实例
以现实生活中的生物类为例:

如上图,在C++中,又如何通过程序来表达出来呢?
在C++中,通过struct表达类,通过:表达继承,所以可以将上图改进为:

又通过变量表达属性,通过函数表达行为.
最终将生活中的例子体现在C++代码中:
#include <stdio.h>
struct Biology { //生物类
bool living;
};
struct Animal : Biology { //动物类继承于: 生物类
bool movable;
void findFood() { }
};
struct Plant : Biology { //植物类继承于: 生物类
bool growable;
};
struct Beast : Animal { //禽兽继承于: 动物类
void sleep() { }
};
struct Human : Animal { //人类继承于: 动物类
void sleep()
{
printf("I'm sleeping ...\n");
}
void work() { }
};
int main()
{
Human ZhangSan; //创建对象
ZhangSan.sleep();
return ;
}
未完待续,下章学习类与封装
6.C++初步分析类的更多相关文章
- DirectUI的初步分析-转
DirectUI的初步分析(一) 最近由于项目的需要学习了一下DirectUI方面的东西,主要借鉴的是一个国外程序员写的代码(见引用一),看了后发现它更多的是探讨一种实现的可能性和思路,和实际应用还是 ...
- drf安装与APIView初步分析
drf安装 1. pip install djangorestframework 2. 在settings文件中注册app : INSTALLED_APPS = [..., 'rest_framewo ...
- Azure底层架构的初步分析
之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...
- <八>面向对象分析之UML核心元素之分析类
一:基本概念 ---->在那大数项目中,分析类是被忽视的一种非常有用的元素. ---->分析类用于获取系统中主要的“职责簇”,他们代表系统的原型类,是系统必须处 ...
- UML--核心元素之分析类
分析类包括边界类.控制类和实体类. 边界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类. myself:就像建模时,不是所有的属性都要建模一样.不是所有的方法都要建模一样.学习也是如此, ...
- Java 反射 分析类和对象
Java 反射 分析类和对象 @author ixenos 摘要:优化程序启动策略.在运行时使用反射分析类的结构和对象 优化程序启动策略 在启动时,包含main方法的类被加载.它会加载所有它需要的类. ...
- 基于Spark和SparkSQL的NetFlow流量的初步分析——scala语言
基于Spark和SparkSQL的NetFlow流量的初步分析--scala语言 标签: NetFlow Spark SparkSQL 本文主要是介绍如何使用Spark做一些简单的NetFlow数据的 ...
- S2-052 RCE漏洞 初步分析
PS:初步分析,只是分析了Struts2 REST插件的部分,本来菜的抠脚不敢发,但看到各大中心发的也没比我高到哪里去,索性发出来做个记事! 漏洞描述 2017年9月5日,Apache Struts发 ...
- Netfilter之连接跟踪实现机制初步分析
Netfilter之连接跟踪实现机制初步分析 原文: http://blog.chinaunix.net/uid-22227409-id-2656910.html 什么是连接跟踪 连接跟踪(CONNT ...
随机推荐
- 久未更 ~ 四之 —— Vsftpd出现 Failed to start Vsftpd ftp daemon错误
> > > > > 久未更 系列一:Failed to start Vsftpd ftp daemon错误 配置 vsftpd.conf文件后 重启ftp服务 出现 Fa ...
- SSH中post提交表单action中文乱码问题
我的问题对应的解决方案是:web.xml中filter的顺序问题[置顶].需要将编码过滤器放置在所有过滤器之前. 在解决这个问题途中学习到的东西: 解决方案总结(post中文乱码): 前后台编码方式一 ...
- forward和redirect
Forward和Redirect代表了两种请求转发方式:直接转发和间接转发. 直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet.HTML.JSP或其它信息资源,由第二个信息 ...
- 更改sql多条数据,更新替换字符串中固定的字符串
需求产生的背景: 数据库里建库时插入了字典数据,可是这个字典数据,有一些是不准确的,所以就需要把一些固定的数据查出来替换掉. 问题解决逻辑: 大体逻辑是,首先把固定需要替换的字符串提取出来,赋值给变量 ...
- Javascript学习--烟花
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Mongodb_基本操作UCRD
网站 Mongodb官网:www.mongodb.org 安装包下载 使用文档 Mongodb国内官方网站:www.mongoing.com 数据库概念 有组织的存放数据 按照不同的需求进行查询 数据 ...
- CentOS6.x机器安装Azure CLI2.0【1】
安装Azure CLI 2.0的前提是:机器中必须有 Python 2.7.x 或 Python 3.x.如果机器中没有其中任何一个Python版本,请及时安装 1.准备一台CentOS 6.9的机器 ...
- 控制台调用天气API例子
第一步,新建控制台应用程序,然后新建类:WeatherReport: using System; using System.Collections.Generic; using System.Linq ...
- C#动态设置匿名类型对象的属性
用C#写WPF程序, 实现功能的过程中碰到一个需求: 动态设置对象的属性,属性名称是未知的,在运行时才能确定. 本来这种需求可以用 Dictionary<string, object> 实 ...
- POI--HSSFWorkbook类
HSSFWorkbook类 要生成一个Workbook,需要用到HSSFWorkbook类文件.构造器如下: 现在我们使用2种方式来获得一个Workbook对象. 1,创建excel表 HSSFWor ...