博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象与类
阅读量:5242 次
发布时间:2019-06-14

本文共 1665 字,大约阅读时间需要 5 分钟。

  在编程过程中总是搞不清“类”和“对象”到底是什么,觉得这个概念比较抽象,所以最近重新开始学习对象和类的概念。(参照C++ primer plus)

  引用书中的概念:“类”是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合为一个整洁的包。

  本人比较笨拙,还是觉得上述概念比较抽象-_-||,索性继续学习下去并尝试理解书中所给的代码的含义及使用方法,看了几页书以后认为“类”其实就是一个包,这个包里边有我们可能用到的许多方法,比如#include<math.h>中的math其实就是一个类,它里边定义了许多方法也就是我们使用的函数,诸如exp(),sqrt(),log()等等,这下子对于这个概念至少不是一团浆糊了。随后敲书上的代码学习,在这个过程中有如下发现:

(1)文件头用到了#ifndef,一开始并不理解这句话是什么意思,但是也没有太在意,就直接敲上去了,结果提示“缺少该指令的#endif”,这就一下子懵逼了(看来还是有一点不懂都要弄清楚的,即使第一眼看起来懂不懂无关紧要),在网上查看以后发现这是一种“防止该头文件被重复引用”的方法,那么什么叫做被重复引用呢,我的第一理解是“不能在不同的两个文件中使用include来包含这个头文件”,其实不然,“被重复引用”是指一个头文件在同一个cpp文件中被include了好几次,常由include嵌套造成,比如:在a.h文件中使用了#include“c.h”,然后在b.h文件中使用#include"a.h"和#include“c.h”,此时就会存在c.h重复使用引用的情况。那么头文件重复引用有什么后果呢?

  1、增加编译工作量,导致编译效率降低,对于小工程而言无太大问题(但是大工程的效率低下很痛苦);

  2、引发错误,比如在上述例子中的c.h中定义了全局变量,那么c.h的重复引用就会导致重复定义;

  所以一般在头文件定义中加入#ifndef/#define/#endif这些代码(不加也不会引发错误,但是利于培养好的编程习惯),使用方式如下:

  #ifndef A_H             //if not define a.h

  #define A_H           //引入a.h

  class xxx                //类结构声明

  {

  ......

  }

  #endif                     //与#ifndef对应

 (2)类的设计。

  指定类设计的第一步是提供类声明,声明中一般将数据成员放在私有部分中,成员函数放在公有部分中,C++通过类实现抽象、数据隐藏和封装。

  第二步是实现类成员函数,类成员函数可以通过类对象来调用。

(3)构造函数与析构函数

  构造函数是为了让开发者使用类就像使用其他标准类型一样,比如像int a;一样去初始化对象,构造函数一般又分为两种。

  第一种是默认构造函数,不用提供显式的初始值即可创建对象,如Stock fluffy_the_cat;(Stock是自定义的类),在没有提供任何构造函数的情况下C++将自动提供默认构造函数。

  第二种是非默认构造函数,需要显式的提供初始化值,如Stock(const char *co, int n, double pr);

  而在实际设计中,通常应该提供对于所有类成员做隐式初始化的默认构造函数。

  析构函数是与构造函数对应的,负责跟踪创建的对象,直到其过期为止,对象过期是,程序将会自动调用析构函数,因此在代码中不需要我们显式的调用该函数。(析构函数是没有参数的)

  析构函数是用来完成清理工作的,在实际工作中意义重大,使用方式为:当构造函数使用new来分配内存时,析构函数要用delete来释放内存,而构造函数没有使用类似new来分配内存时,析构函数就没有要实际完成的工作,可以没有返回值和声明类型,析构函数的名称格式是固定的,在类名前加上“~”。

(未完待续)

转载于:https://www.cnblogs.com/LDTSB-0101001/p/9710973.html

你可能感兴趣的文章
OpenAI Gym
查看>>
stap-prep 需要安装那些内核符号
查看>>
网易杭研后台技术中心的博客 -MYSQL :OOM
查看>>
第二章 数据通信的基础知识 计算机网络笔记 学堂在线 2.1 数据传输系统 2.2 信号...
查看>>
如何解决click事件的重复触发问题
查看>>
2016寒假自学笔记
查看>>
VC++2012编程演练数据结构《21》二叉排序树
查看>>
Easyui NumberBox格式化展示
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
[HDU]3371 Connect the Cities
查看>>
那些年我们刷过的手机
查看>>
python--数据类型--1
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>