首页 > 编程语言 >C++ 多态与虚拟:Class 语法语义

C++ 多态与虚拟:Class 语法语义

时间:2024-04-24 18:33:07浏览次数:24  
标签:float int object 多态 C++ Class member CPoint class

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,并没有什么常见的命名习惯。

标签:float,int,object,多态,C++,Class,member,CPoint,class
From: https://www.cnblogs.com/ruanchunyi/p/18156080

相关文章

  • C++ 对象
    概述C++的招牌能力之一,也是C++的核心特性没有之一,也是在C基础扩展的最重要的能力,一切皆可封装为对象,有三大主要特性,封装、多态、继承。基础简单理解,类就是用户自定义的一种数据结构,封装了数据和行为(函数)的组合。类中的数据称为成员变量,函数称为成员函数。类可以被看作是一种......
  • 使用VS Code和WSL开发C/C++的简单配置
    使用VSCode和WSL开发C/C++的简单配置目录使用VSCode和WSL开发C/C++的简单配置使用情形VSCodeDebug简要介绍由于微软文档写的非常详细,感觉没什么写的必要了,后续只贴参数和链接了task配置launch配置C/C++配置参考来源使用情形TheWindowsSubsystemforLinux适用于Linux的W......
  • C++ 指针变量的字面量以及其所指对象的字面量
    指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarvari......
  • C++ 指针变量的字面量以及其所指对象的字面量
    指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarvari......
  • c++
     如何验证gcc正常使用,编译c以及运行过程要验证GCC(GNUCompilerCollection)是否正常使用,您可以按照以下步骤进行操作:检查GCC是否安装:打开终端或命令行界面,输入以下命令来检查GCC是否已安装:gcc--version 如果GCC已正确安装,您将看到GCC的版本信息。如果没有安装,您......
  • C++ 指针变量的字面量以及其所指对象的字面量
    指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarvari......
  • 为什么自动驾驶领域发论文都是用强化学习算法,但是实际公司里却没有一家使用强化学习算
    为什么自动驾驶领域发论文都是用强化学习算法,但是实际公司里却没有一家使用强化学习算法?——(特斯拉今年年初宣布推出实际上第一款纯端到端的自动驾驶系统,全部使用强化算法,替换掉原有的30万行C++的rule-based代码)给出一个自己比较认可的答案:https://www.zhihu.com/question/54......
  • C++ 指针变量的字面量以及其所指对象的字面量
     指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarv......
  • k8s Java 项目替换 jar 中的 class 文件
    背景紧急需求,客户需要立马上线docker包体积过大,远程不稳定,文件发不过去单点修改,风险低步骤1.获取pod所在宿主机podonhostkubectl-n$namespancegetpods-owide|grep$podname|grepRunning2.获取pod的容器cidkubectl-n$namespancedescribepo$podn......
  • 深度解读《深度探索C++对象模型》之C++虚函数实现分析(二)
    接下来我将持续更新“深度解读《深度探索C++对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。第一篇请从这里阅读:深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)这一篇主要讲解多重继承情况下的虚函数实现分析。在多重......