C++在C的面向过程概念的基础上提供了面向对象和模板(泛型编程)的语法功能 。
下面以一个简单实例(动态数组的简单封装,包括下标的值可以是任意正数值,并提供边界检查)来说明C++是如何实现其逐层抽象的 。
1 用结构体实现
// array.h// array库的接口#ifndef _array_h#define _array_h// 可指定下标范围的数组的存储struct DoubleArray{int low;int high;double *storage;};// 根据low和high为数组分配空间 。分配成功,返回值为true,否则返回值为falsebool initialize(DoubleArray &arr, int low, int high);// 设置数组元素的值// 返回值为true表示操作正常,返回值为false表示下标越界bool insert(const DoubleArray &arr, int index, double value);// 取数组元素的值// 返回值为true表示操作正常,返回值为false表示下标越界bool fatch(const DoubleArray &arr, int index, double &value);// 回收数组空间void cleanup(const DoubleArray &arr);#endif// array.cpp// array库的实现#include "array.h"#include <IOStream>using namespace std;// 根据low和high为数组分配空间 。分配成功,返回值为true,否则返回值为falsebool initialize(DoubleArray &arr, int low, int high){arr.low = low;arr.high = high;arr.storage = new double [high - low + 1];if (arr.storage == NULL)return false;elsereturn true;}// 设置数组元素的值// 返回值为true表示操作正常,返回值为false表示下标越界bool insert(const DoubleArray &arr, int index, double value){if (index < arr.low || index > arr.high)return false;arr.storage[index - arr.low] = value;return true;}// 取数组元素的值// 返回值为true表示操作正常,返回值为false表示下标越界bool fatch(const DoubleArray &arr, int index, double &value){if (index < arr.low || index > arr.high)return false;value = https://www.isolves.com/it/cxkf/yy/C/2021-10-18/arr.storage[index - arr.low] ;return true;}// 回收数组空间void cleanup(const DoubleArray &arr){if (arr.storage)delete [] arr.storage; }// arrayApp.cpp// array库的应用示例#include
相关的函数全部有一个结构体函数参数,来操作结构体 。通过头文件包括结构体和函数声明来实现模块化并提供接口,实现一个较松散的数据与函数的结合 。
而类则不同,类除了提供数据聚合的结构体功能以外,还可以将函数封装进去,通过类名实现名字空间,并为成员函数提供一个隐含的指向类对象的this指针,使其成员函数能够访问并操作数据成员 。
2 用一个不完整的类来模拟结构体实现
// array.h// 改进后的array接口#ifndef _array_h#define _array_hstruct DoubleArray{int low;int high;double *storage;// 根据low和high为数组分配空间 。分配成功,返回值为true,否则返回值为falsebool initialize(int lh, int rh);// 设置数组元素的值// 返回值为true表示操作正常,返回值为false表示下标越界bool insert(int index, double value);// 取数组元素的值// 返回值为true表示操作正常,返回值为false表示下标越界bool fatch(int index, double &value);// 回收数组空间void cleanup();};#endif// array.cpp// 改进后的array库的实现#include "array.h"#include <iostream>using namespace std;// 根据low和high为数组分配空间 。分配成功,返回值为true,否则返回值为falsebool DoubleArray::initialize(int lh, int rh){low = lh;high = rh;storage = new double [high - low + 1];if (storage == NULL)return false;else return true;}// 设置数组元素的值// 返回值为true表示操作正常,返回值为false表示下标越界bool DoubleArray::insert(int index, double value){if (index < low || index > high)return false;storage[index - low] = value;return true;}// 取数组元素的值// 返回值为true表示操作正常,返回值为false表示下标越界bool DoubleArray::fatch(int index, double &value){if (index < low || index > high)return false;value = https://www.isolves.com/it/cxkf/yy/C/2021-10-18/storage[index - low] ;return true;}//回收数组空间void DoubleArray::cleanup(){if (storage)delete [] storage; }// arrayapp.cpp// 改进后的array库的应用示例#include
推荐阅读
- 莳萝功效,莳萝精油的功效与作用
- 喝人参花茶的好处,喝人参茶的好处
- 在Java中使用Optional的开销很大 - pkolaczk
- 洋甘菊对皮肤的功效,洋甘菊的功效
- 五宝茶哪个牌子好,五宝茶什么牌子的好
- 双柏散的功效与作用,四妙散的功效与作用
- linux之grep使用技巧
- 藤合欢的别名,合欢皮别名是什么呢
- H3C常见视图及命令
- 微波炉怎么加热饭菜,不能用微波炉加热的食物