一、"类" 的介绍

在C++中, 用 "" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量、都有两个轮子, 都是属于交通工具等。"都有质量"、"两个轮子"属于这个对象的属性, 而"都能够当做交通工具"属于该对象具有的行为, 也称方法

类是属于用户自定义的数据类型, 并且该类型的数据具有一定的行为能力, 也就是类中说描述的方法。通常来说, 一个类的定义包含两部分的内容, 一是该类的属性, 另一部分是它所拥有的方法。以 "人类" 这个类来说, 每个人都有自己的姓名、年龄、出生日期、体重等, 为 人类 的属性部分, 此外, 人能够吃饭、睡觉、行走、说话等属于人类所具有的行为。

上面举例中所描述的 "人" 类仅仅是具有人这种对象的最基础的一些属性和行为, 可以称之为人的"基类"。 再说说一些具有一些职业的人, 例如学生, 一个学生还具有"基类"中所没有的属性, 如学校、班级、学号; 也可以具有基类所不具有的行为, 如每天需要去上课, 需要考试等。

学生类可以看做是基类的一个扩展, 因为他具有基类的所有属性和行为, 并且在此基础上增加了一些基类所没有的属性和行为, 像"学生"这样的类称为"人类"这个基类的"派生类"或者"子类"。在学生的基础上海可以进一步的扩展出其他更高级的类, 如"研究生"类。

到此,,我们不再更深的去介绍类的其他相关知识。

二、C++类的定义

C++中使用关键字 class 来定义类, 其基本形式如下:

说明:

①. 类名 需要遵循一般的命名规则;

②. public 与 private 为属性/方法限制的关键字, private 表示该部分内容是私密的, 不能被外部所访问或调用, 只能被本类内部访问; 而 public 表示公开的属性和方法, 外界可以直接访问或者调用。

一般来说类的属性成员都应设置为private, public只留给那些被外界用来调用的函数接口, 但这并非是强制规定, 可以根据需要进行调整;

③. 结束部分的分号不能省略。

类定义示例:

定义一个点(Point)类, 具有以下属性和方法:

■ 属性: x坐标, y坐标

■ 方法: 1.设置x,y的坐标值; 2.输出坐标的信息。

实现代码如下:

代码说明:

上段代码中定义了一个名为 Point 的类, 具有两个私密属性, int型的xPos和yPos, 分别用来表示x点和y点。在方法上, setPoint 用来设置属性, 也就是 xPos 和 yPos 的值; printPoint 用来输出点的信息。

类在定义时有以下几点需要注意:

①. 类的数据成员中不能使用 auto、extern和register等进行修饰, 也不能在定义时进行初始化, 如 int xPos = 0; //错;

②. 类定义时 private 和 public 关键词出现的顺序和次数可以是任意的;

③. 结束时的分号不能省略, 切记!

三、C++类的实现

在上面的定义示例中我们只是定义了这个类的一些属性和方法声明, 并没有去实现它, 类的实现就是完成其方法的过程。类的实现有两种方式, 一种是在类定义时完成对成员函数的定义, 另一种是在类定义的外部进行完成。

1>. 在类定义时定义成员函数

成员函数的实现可以在类定义时同时完成, 如代码:

运行输出:

与类的定义相比, 在类内实现成员函数不再是在类内进行声明, 而是直接将函数进行定义, 在类中定义成员函数时, 编译器默认会争取将其定义为 inline型函数。

2>. 在类外定义成员函数

在类外定义成员函数通过在类内进行声明, 然后在类外通过作用域操作符 :: 进行实现, 形式如下:

返回类型 类名::成员函数名(参数列表)

将示例中的代码改用类外定义成员函数的代码:

依 setPoint 成员函数来说, 在类内声明的形式为 void setPoint(int x, int y); 那么在类外对其定义时函数头就应该是 void Point::setPoint(int x, int y) 这种形式, 其返回类型、成员函数名、参数列表都要与类内声明的形式一致。

四、C++类的使用

将一个类定义并实现后, 就可以用该类来创建对象了, 创建的过程如同 int、char 等基本数据类型声明一个变量一样简单, 例如我们有一个Point类, 要创建一个Point的对象只需要:

Point 对象名;

创建一个类的对象称为该类的实例化, 在创建时我们还可以对对象的属性进行相关的初始化, 这样在创建完成后该对象就已经具有了一定得属性, 这种创建方式将在下一篇博文中进行学习。

将类进行实例化后系统才会根据该对象的实际需要分配一定的存储空间。这样就可以使用该对象来访问或调用该对象所能提供的属性或方法了。

还以上面的代码为例, 为了减少篇幅, 我们把 Point 类的实现放在 Point.h 头文件中, 这里不再贴出 Point 类的实现代码。

代码在编译时会出现错误, 提示 error: 'int Point::xPos' is private, 这是 cout<< M.xPos <<endl; 这行造成的, 他试图访问一个 private 对象中的私密数据 xPos, 如果将这行去掉便可正常运行。

通过 对象名.公有函数名(参数列表); 的形式就可以调用该类对象所具有的方法, 通过 对象名.公有数据成员; 的形式可以访问对象中的数据成员。

五、对象的作用域、可见域与生存周期

类对象的作用域、可见域以及生存周期与普通变量的保持相同, 当对象生存周期结束时对象被自动撤销, 所占用的内存被回收, 需要注意的是, 如果对象的成员函数中有使用 new 或者 malloc 申请的动态内存程序不会对其进行释放, 需要我们手动进行清理, 否则会造成内存泄露。

学习C++ 丨 类(Classes)的定义与实现!C/C++必学知识点!相关推荐

  1. 学习C++ - 类(Classes)的定义与实现

     一."类" 的介绍     在C++中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物. ...

  2. 小白对于学习对象和类的总结,定义一个圆柱体类Cylinder,并创建相应的对象,然后计算圆柱体的底面积和面积.

    类和对象 类:类的概念就是让程序设计能更清楚卖出日常生活中的事物,也可以理解为对一类事物的统称包含对于属性描述和行为描述!注解:属性描述:描述当前类有哪些属性.行为描述:描述当前有哪些行为.举例: 以 ...

  3. 2020年新版Java学习路线图最全更新!囊括史上最全面104个知识点

    黑马程序员视频库 播妞QQ号:3077485083 传智播客旗下互联网资讯.学习资源免费分享平台 2020年,你有没有被突如其来的疫情打破原定的安排和计划? "停课不停学,延期不延工&quo ...

  4. C++学习笔记:类的成员函数的声明与定义

    今天学习一下类的成员函数,首先讲一下常规的类外的函数 写在类的外部的函数叫做全局函数,不属于任何的类. 如果写在类的里面就叫做类的成员函数 这里注意的是,类的成员函数如果加了const,就表明该函数不 ...

  5. Essential C++学习记录笔记整理35(定义一个派生类)

    目录 派生类: 一些机制的说明 纯虚函数和虚函数的补充 类继承的一些原则和注意(对于继承过来的数据成员/成员函数) 跳过虚函数机制 派生类同名成员优先被调用机制 如何在派生类调用基类的成员函数(该成员 ...

  6. python学习笔记(八)类(classes)

    Python的类机制使用尽可能少的新语法和语义将类引入语言.python的类提供了面向对象程序设计语言所有的 标准特性:类继承机制允许有多个基类,一个派生类可以覆盖基类中的任何方法,一个方法可以使用相 ...

  7. C++基础学习8:类的定义(class)

    先来说说C和C++中结构体的不同a) C语言中的结构体不能为空,否则会报错(??)b) C语言中内存为空结构体分配大小为0,C++中为结构体和类分配大小为1bytec) C语言中的结构体只涉及到数据结 ...

  8. 【面向对象编程】(2) 类属性的定义及使用;__repr__()方法

    各位同学好,在上一节中我们学习了类实例化的基本方法:https://blog.csdn.net/dgvv4/article/details/122275348?spm=1001.2014.3001.5 ...

  9. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    Spring MVC 学习总结(二)--控制器定义与@RequestMapping详解 目录 一.控制器定义 1.1.实现接口Controller定义控制器 1.2.使用注解@Controller定义 ...

最新文章

  1. java并发订单号生成
  2. UOJ284 快乐游戏鸡(树上动态规划问题、长链剖分+单调栈)
  3. LeetCode 1759. 统计同构子字符串的数目
  4. Zabbix 安装agent
  5. mac os qt项目编译_【Qt开发】第一个Qt程序Hello World!
  6. 前端图片压缩上传(纯js的质量压缩,非长宽压缩)
  7. php 复杂数组排序,如何利用php array_multisort函数 对数据库结果进行复杂排序
  8. java连接oracle数据库jdbc
  9. WPFのclipToBounds与maskToBounds的区别
  10. Contest 7.21(贪心专练)
  11. 传智播客Java 二维数组
  12. 皮尔逊系数皮尔逊系数---K近算法之皮尔逊系数
  13. python的基础操作_python列表基础操作
  14. Hadoop学习2:Hadoop环境配置:JDK 1.8和Hadoop配置
  15. 支付系统详解:清结算系统
  16. 计算机开关机命令,电脑定时关机命令取消以及开启方法介绍
  17. 【Android 性能优化】应用启动优化 ( 主题背景图片设置 | 设置透明主题背景 | 设置应用启动主题背景、启动后恢复主题 )
  18. 中国天气网城市代码python字典的生成方法分享(1)
  19. 安卓手机使用VNET抓包京东wskey
  20. 同时展示多张图片的无缝轮播

热门文章

  1. ant design pro 加载慢_ant design pro (九)引入外部模块
  2. 普通人CV领域论文创新常见思路与方向总结
  3. 一文看懂CV中的注意力机制
  4. 点云配准求物体的6D姿态(转)
  5. mfc窗口添加背景图片
  6. qDebug 的用法
  7. RDKit | 基于RDKit去除片段(盐或络合物等)
  8. R语言-路径设置与工作目录修改
  9. 基于python爬虫数据处理_基于Python爬虫的校园数据获取
  10. Mdnice 简洁主题