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

作业:

使用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;
}


思维导图:

相关推荐
让我们一起加油好吗25 分钟前
【C++】封装红黑树模拟实现 set 和 map
linux·c++·set·map·红黑树
Mr.Ja28 分钟前
【LeetCode热题100】No.11——盛最多水的容器
算法·leetcode·贪心算法·盛水最多的容器
hsjkdhs31 分钟前
C++之类的继承与派生
开发语言·c++
冷徹 .41 分钟前
2024ICPC区域赛香港站
数据结构·c++·算法
lly2024061 小时前
HTML 元素:构建网页的基础
开发语言
低调小一1 小时前
LRU缓存科普与实现(Kotlin 与 Swift)
开发语言·缓存·kotlin
爱好学习的青年人1 小时前
一文详解Go语言字符串
开发语言·后端·golang
沐怡旸1 小时前
【底层机制】std:: function 解决的痛点?是什么?如何实现?如何正确用?
c++·面试
浅川.251 小时前
xtuoj string
开发语言·c++·算法
望获linux1 小时前
【实时Linux实战系列】实时系统的可观测性:Prometheus 与 Grafana 集成
大数据·linux·服务器·开发语言·网络·操作系统