C++ 多态与假造:Class 语法语义

金歌  金牌会员 | 2024-5-18 06:58:01 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 580|帖子 580|积分 1740

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这样的语言内置类型也可以看作是一种类,它们用于描述数据的性子,但通常没有相干的处理程序。
  1. int i;  // i 是 一 个 int object.
  2. float f;  // f 是一个 float object.
复制代码
 
4.object与class的关系:如今让我们以一个实例阐明一下object与class的关系,假设我们的class设计如下:
  1. 1 //CStroke描述线条应有的特征
  2. 2
  3. 3 class CStroke
  4. 4 {
  5. 5     //CStroke的行为
  6. 6     public:
  7. 7         void DrawStroke( /*....*/ ){ }; //画线条
  8. 8         void Serialize( /*....*/ ){ };  //档案调用
  9. 9     
  10. 10     //CStroke的数据
  11. 11     protected:
  12. 12         vector<Point*>m_Array; //存储线条坐标
  13. 13         int m_penColor;//笔的颜色
  14. 14         int m_penWidth;//笔的宽度
  15. 15         int m_penStyle;//笔的样式
  16. 16 };
复制代码
  于是每当使用者在屏幕上画一线条(stoke),盘算机便有程序中产生一个CStroke object,其中有一个array准备用来存储线条上各点的坐标,以及三个int变量分别代表笔的颜色、宽度、样式。我们必肌设计一些UIQ函数,让使用者能够以滑动鼠标来取代画笔,直接在屏幕上输出构成线条的每一个点坐标,以下图为例,程序产生了8个CStroke object。

 5. class的声明和实现( Declaration & Implementation):下面是 C++ class 的声明情势(declaration),通常放在 .h 文件中:
  1. 1 class CPoint{
  2. 2 public:
  3. 3     CPoint(float x=0.0) :_x(x){}
  4. 4     
  5. 5     float x(){return _x;}
  6. 6     
  7. 7     void x(float xval ){_x=xval;}
  8. 8     
  9. 9 protected:
  10. 10     float _x; // data member
  11. 11
  12. 12
  13. 13 };
复制代码
  class内含有两种东西:一个是data member(例如上面的_x),一个是menber functions(例如上述的CPoint()以及两个x())。上例的三个member functions都直接在class中完成了实现,以是主动成为一个inline函数。通常是函数比力简单的我们才会这样做,假如函数比力复杂的,我们会在class declaration 中完成member functions的声明,而在.cpp文件中完成实现的部分(implementation)例如:
  1. 1 //in hello.h
  2. 2
  3. 3 class CPoint{
  4. 4 public:
  5. 5     CPoint(float x=0.0) :_x(x){}
  6. 6     
  7. 7     float x();          //只是member function的声明
  8. 8     
  9. 9     void x(float xval );//只是member function的声明
  10. 10     
  11. 11 protected:
  12. 12     float _x; // data member
  13. 13
  14. 14
  15. 15 };
复制代码
  1. 1 //in hello.cpp
  2. 2 #include "hello.h"
  3. 3
  4. 4 float CPoint::x(){return _x;}         //实现内容
  5. 5 void CPoint::x(float xval ){_x=xval;} //实现内容
复制代码
6.符号定名习惯( Naming Convention):有一种常见的符号定名习惯是在class名称前面加上“C”,在data members名称前面加上"m_",至于member functions,并没有什么常见的定名习惯。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表