第二章:面向对象之封装(一)

作业:

使用C++手动封装一个顺序表,包含成员指针变量,成员变量N个

cpp 复制代码
#ifndef SEQLIST_H
#define SEQLIST_H

#include <iostream>

using namespace std;
using datatype = int;
class Seqlist
{
private:
    datatype * data;
    int size = 0;
    int len = 0;
public:
    //无参构造
    Seqlist();
    //有参构造
    Seqlist(int s);
    //要实现的函数
    //判空函数
    bool empty();
    //判满函数
    bool full();
    //添加数据函数
    bool add(datatype e);
    //求当前顺序表的实际长度
    int length();
    //求当前顺序表的容量
    int si();
    //任意位置插入函数
    bool insert_pos(int pos,datatype e);
    //任意位置删除函数
    bool delete_pos(int pos);
    //访问容器中任意一个元素 at
    datatype & at(int index);
    //君子函数:二倍扩容
    void expend();
    //释放顺序表
    void seqfree();
};

#endif // SEQLIST_H
cpp 复制代码
#include "seqlist.h"
//无参构造
Seqlist::Seqlist():data(new datatype[10]),size(10),len(0)
{
    cout<<"创建了一个大小为10的顺序表\n";
}
//有参构造
Seqlist::Seqlist(int s):data(new datatype[s]),size(s),len(0)
{
    cout<<"创建了一个大小为"<<s<<"的顺序表\n";
}
//要实现的函数
//判空函数
bool Seqlist::empty()
{
    if(len == 0)
    {
        return 1;
    }
    return 0;
}
//判满函数
bool Seqlist::full()
{
    if(len == size)
    {
        return 1;
    }
    return 0;
}
//添加数据函数
bool Seqlist::add(datatype e)
{
    if(full())
    {
        cout<<"数据添加失败\n";
        return 0;
    }
    data[len] = e;
    len++;
    cout<<"数据添加成功\n";
    return 1;
}
//求当前顺序表的实际长度
int Seqlist::length()
{
    return len;
}
//求当前顺序表的容量
int Seqlist::si()
{
    return size;
}
//任意位置插入函数
bool Seqlist::insert_pos(int pos,datatype e)
{
    if(full() || pos<0 || pos>size)
    {
        cout<<"数据插入失败\n";
        return 0;
    }
    for(int i=len;i>pos;i--)
    {
        data[i] = data[i-1];
    }
    data[pos] = e;
    len++;
    cout<<"数据插入成功\n";
    return 1;
}
//任意位置删除函数
bool Seqlist::delete_pos(int pos)
{
    if(empty() || pos<0 || pos>size)
    {
        cout<<"数据删除失败\n";
        return 0;
    }
    for(int i=pos;i<len;i++)
    {
        data[i] = data[i+1];
    }
    len--;
    cout<<"数据删除成功\n";
    return 1;
}
//访问容器中任意一个元素 at
datatype & Seqlist::at(int index)
{
    if(empty() || index<0 || index>size)
    {
        cout<<"数据访问失败\n";
        return data[0];
    }
    cout<<data[index];
    return data[index];
}
//君子函数:二倍扩容
void Seqlist::expend()
{
    if(empty())
    {
        cout<<"顺序表扩容失败\n";
        return;
    }
    datatype * newdata = new datatype[size*2];
    for(int i=0;i<len;i++)
    {
        newdata[i] = data[i];
    }
    size *= 2;
    delete []data;
    data = newdata;
    cout<<"顺序表二倍扩容成功\n";
}
//释放顺序表
void Seqlist::seqfree()
{
    delete []data;
    data = NULL;
    cout<<"顺序表释放成功\n";
}
cpp 复制代码
#include "seqlist.h"

int main()
{
    Seqlist stu(50);
    stu.add(89);
    stu.add(98);
    stu.add(94);
    stu.add(73);
    stu.insert_pos(2,78);
    stu.delete_pos(1);
    stu.insert_pos(0,66);
    cout<<"当前顺序表长度为"<<stu.length()<<endl;
    cout<<"当前顺序表值分别为:\n";
    for(int i=0;i<stu.length();i++)
    {
        stu.at(i);
        cout<<'\t';
    }
    cout<<endl;
    cout<<"当前顺序表容量为"<<stu.si()<<endl;
    stu.expend();
    cout<<"当前顺序表容量为"<<stu.si()<<endl;
    cout<<"当前顺序表值分别为:\n";
    for(int i=0;i<stu.length();i++)
    {
        stu.at(i);
        cout<<'\t';
    }
    cout<<endl;
    stu.seqfree();
    return 0;
}


思维导图:

相关推荐
啄缘之间10 分钟前
5.1 uvm‑component 的层级结构管理? new (name,parent) 参数
开发语言·笔记·学习·ic·uvm·sv
鹿角片ljp16 分钟前
LeetCode 53. 最大子数组和
算法·leetcode·职场和发展
旖旎夜光24 分钟前
C++(类与对象)(下)
开发语言·c++·学习
张小凡vip30 分钟前
Python爬虫实战:高效稳定的文件下载模块设计与实现
开发语言·爬虫·python
江屿风31 分钟前
【科普】【差集&交集概念落地云相册】流食般投喂
开发语言·c++·笔记·算法·云相册
数模竞赛Paid answer33 分钟前
2023年五一杯数学建模A题无人机定点投放问题求解全过程完整文档及程序
算法·数学建模·无人机·五一杯
代龙涛34 分钟前
WordPress header.php 与 footer.php 模板结构详解
开发语言·php·wordpress
科学实验家40 分钟前
dp子序列问题,好难呀
算法
黄贵根6 小时前
JavaScript实现教培行业意向登记系统
开发语言·javascript·ecmascript
2401_868534789 小时前
RTOS之RT-Thread & Linux:线程/进程管理与调度核心差异分析
c++·python