论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
程序人生
›
C++ 多态与假造:Class 语法语义
C++ 多态与假造:Class 语法语义
金歌
金牌会员
|
2024-5-18 06:58:01
|
显示全部楼层
|
阅读模式
楼主
主题
863
|
帖子
863
|
积分
2589
1.object与class:在object-oriented programming编程范畴,对象(object)有更严格的定义。对象是由数据布局和用于处理该布局的过程(称为methods)组成的实体(instance)。这些方法由对象接收的消息激活。一个对象的内部数据布局与其他对象完全隔离(此属性称为“encapsulation”)。对象是基于模板天生的。从某个模板天生的实体(instance)的集合称为类。有一个重要的属性叫做继承,它允许在现有类上构建新的类,继承现有类的全部或部分特性,并允许扩展新特性。有些系统甚至实现了多重继承,允许一个类从多个父类继承。假如你照旧没有懂,那么只要建立这样一个概念就行了,Object就是个“东西”,是“东西”就得占空间,在盘算机中就得占肯定内存,以是我们称他为实体(instance)。上述相档部份在描述“东西”的产生,它说“东西是模板产生的”,其实这模板(template)就是“东西”的属性描述,也就是类(class)。需要留意的是class是一种属性的描述,而并非实体,根据class产生的object才是实体。
2.instantiation:产生object的过程我们称之为实例化(instantiation),根据object class(或者template)产生一个实体的过程就是instantiation。
3.object-oriented programming:面向对象编程是一种编程方式,它使用“对象”作为程序的基本功能单元。程序员会花费许多精神来描述对象的属性,包括它们的数据和行为(处理数据的方法),并使用“类”的语法来展示他们的设计。当程序开始运行时,根据设计好的类,会创建出实际的对象。这些对象会相互合作,共同实现程序的功能。此外,像int、float、long这样的语言内置类型也可以看作是一种类,它们用于描述数据的性子,但通常没有相干的处理程序。
int i; // i 是 一 个 int object.
float f; // f 是一个 float object.
复制代码
4.object与class的关系:如今让我们以一个实例阐明一下object与class的关系,假设我们的class设计如下:
1 //CStroke描述线条应有的特征
2
3 class CStroke
4 {
5 //CStroke的行为
6 public:
7 void DrawStroke( /*....*/ ){ }; //画线条
8 void Serialize( /*....*/ ){ }; //档案调用
9
10 //CStroke的数据
11 protected:
12 vector<Point*>m_Array; //存储线条坐标
13 int m_penColor;//笔的颜色
14 int m_penWidth;//笔的宽度
15 int m_penStyle;//笔的样式
16 };
复制代码
于是每当使用者在屏幕上画一线条(stoke),盘算机便有程序中产生一个CStroke object,其中有一个array准备用来存储线条上各点的坐标,以及三个int变量分别代表笔的颜色、宽度、样式。我们必肌设计一些UIQ函数,让使用者能够以滑动鼠标来取代画笔,直接在屏幕上输出构成线条的每一个点坐标,以下图为例,程序产生了8个CStroke object。
5. class的声明和实现( Declaration & Implementation):下面是 C++ class 的声明情势(declaration),通常放在 .h 文件中:
1 class CPoint{
2 public:
3 CPoint(float x=0.0) :_x(x){}
4
5 float x(){return _x;}
6
7 void x(float xval ){_x=xval;}
8
9 protected:
10 float _x; // data member
11
12
13 };
复制代码
class内含有两种东西:一个是data member(例如上面的_x),一个是menber functions(例如上述的CPoint()以及两个x())。上例的三个member functions都直接在class中完成了实现,以是主动成为一个inline函数。通常是函数比力简单的我们才会这样做,假如函数比力复杂的,我们会在class declaration 中完成member functions的声明,而在.cpp文件中完成实现的部分(implementation)例如:
1 //in hello.h
2
3 class CPoint{
4 public:
5 CPoint(float x=0.0) :_x(x){}
6
7 float x(); //只是member function的声明
8
9 void x(float xval );//只是member function的声明
10
11 protected:
12 float _x; // data member
13
14
15 };
复制代码
1 //in hello.cpp
2 #include "hello.h"
3
4 float CPoint::x(){return _x;} //实现内容
5 void CPoint::x(float xval ){_x=xval;} //实现内容
复制代码
6.符号定名习惯( Naming Convention):有一种常见的符号定名习惯是在class名称前面加上“C”,在data members名称前面加上"m_",至于member functions,并没有什么常见的定名习惯。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
金歌
金牌会员
这个人很懒什么都没写!
楼主热帖
白鲸开源 DataOps 平台加速数据分析和 ...
iOS 集成WebRTC相关知识点总结 ...
缓存穿透,缓存雪崩,缓存击穿 ...
【docker专栏6】详解docker容器状态转 ...
SQL Server 2014完全卸载与SQL Server ...
查漏补缺——路由显示的是http://local ...
【ALM工具软件】上海道宁与Perforce为 ...
如何成功实施一个数据治理项目?实施步 ...
一个工作薄中快速新建多个数据表 ...
Flutter/Dart第09天:Dart高级特殊Patt ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表