鱼C论坛

 找回密码
 立即注册
查看: 1195|回复: 3

[已解决]编写一个类实现如下功能

[复制链接]
发表于 2021-12-28 11:29:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.        编写程序,其中定义一个int顺序栈类CSeqStack(最多可存放100个元素),其中包含如下公有成员:
a)无参构造函数,初始化一个空栈;
b)拷贝构造函数,初始化一个传入栈对象的拷贝;
c)void CSeqStack::push(int x),压栈操作;
d)int CSeqStack::pop(),弹栈操作;
e)int CSeqStack::isEmpty(),判栈空操作,栈中元素为0返回true,否则返回false;
f)int CSeqStack::isFull(),判栈空操作,栈中元素≥100返回true,否则返回false;
g)析构函数;
使用该类实现如下功能:从控制台输入一组正整数(数量不超过100,输入0表示结束),将输入的这些正整数按输入顺序逆序输出,且每行输出5个数(用,分隔)。
最佳答案
2021-12-28 19:03:40
本帖最后由 傻眼貓咪 于 2021-12-28 19:09 编辑

我的代码有三点必须注意:
1.)采用头文件和源文件编写,在运行之前,请自行确保路径与设定无误(不要问我为什么系统显示找不到之类的问题)。
2.)我用头文件 <memory> 里面有个成员 make_unique 只能是 C++14 或以上版本才能正常运行,如果你的编译器是老版本,不能运行(不要问我为什么,问 C++ 官方)。
3.)我不晓得为什么楼主明明才做填空白题,突然跳跃这么远,希望楼主已经将基础学稳了,不然看见我的代码什么都问,我会晕,基本上我都已经注解了。

CSeqStack.h
  1. /* 头文件 */
  2. #include <memory>
  3. using namespace std;

  4. class CSeqStack
  5. {
  6.         /* 私有成员 */
  7.     unique_ptr<int[]>stackArray; // C++11
  8.     int capacity;
  9.     int top;
  10.    
  11.         public:
  12.                
  13.             CSeqStack(int capacity); // 构造函数
  14.             ~CSeqStack(); // 析构函数
  15.             
  16.             /* 公共成员 */
  17.             void push(int value);
  18.             void pop (int &value);
  19.             bool isEmpty() const;
  20.             bool isFull() const;
  21.             
  22.             /* 堆栈异常 */
  23.             class Overflow {};
  24.             class Underflow {};
  25. };
复制代码
CSeqStack.cpp
  1. /* 源文件 */
  2. #include "CSeqStack.h"

  3. CSeqStack::CSeqStack(int capacity){
  4.     stackArray = make_unique<int[]>(capacity); // C++14
  5.     this->capacity = capacity;
  6.     top = 0;
  7. }

  8. /* (g)析构函数 */
  9. CSeqStack::~CSeqStack(){}

  10. void CSeqStack::push(int value){
  11.     if (top == capacity)
  12.         throw CSeqStack::Overflow();
  13.     stackArray[top] = value;
  14.     top++;
  15. }

  16. bool CSeqStack::isEmpty() const{ return top == 0; }

  17. bool CSeqStack::isFull() const{ return top >= capacity; }

  18. void CSeqStack::pop(int &value){
  19.     if (isEmpty()) throw CSeqStack::Underflow();
  20.     top--;
  21.     value = stackArray[top];
  22. }
复制代码
main.cpp
  1. /* 这是主文件 */
  2. #include "CSeqStack.h"
  3. #include <iostream>

  4. using namespace std;

  5. int main()
  6. {
  7.     /* (a)无参构造函数,初始化一个空栈,最多可存放100个元素*/
  8.     CSeqStack stack(100);
  9.        
  10.     /* (b)拷贝构造函数,初始化一个传入栈对象的拷贝 */
  11.     CSeqStack *p = &stack;
  12.        
  13.     int value, num;
  14.    
  15.     /* (c)压栈操作 */
  16.     cout << "压栈操作...\n";
  17.     while(scanf("%d", &num)){
  18.         if(!num) break;
  19.                 p->push(num);
  20.         cout << num << " ";
  21.         }
  22.        
  23.     /* (d)弹栈操作 */
  24.     cout << "\n弹栈操作...\n";
  25.     while (!p->isEmpty()){
  26.         p->pop(value);
  27.         cout << value << " ";
  28.     }
  29.    
  30.     /* (e)判栈空操作,栈中元素为 0 返回 true,否则返回 false; */
  31.     cout << endl << "栈是否空?:" << (bool)p->isEmpty()<< endl;
  32.        
  33.     /* (f)判栈空操作,栈中元素 ≥100 返回 true,否则返回 false; */
  34.     cout << "栈是否满?:" << (bool)p->isFull()<< endl;
  35.    
  36.     cout << endl;
  37.     return 0;
  38. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-28 19:03:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2021-12-28 19:09 编辑

我的代码有三点必须注意:
1.)采用头文件和源文件编写,在运行之前,请自行确保路径与设定无误(不要问我为什么系统显示找不到之类的问题)。
2.)我用头文件 <memory> 里面有个成员 make_unique 只能是 C++14 或以上版本才能正常运行,如果你的编译器是老版本,不能运行(不要问我为什么,问 C++ 官方)。
3.)我不晓得为什么楼主明明才做填空白题,突然跳跃这么远,希望楼主已经将基础学稳了,不然看见我的代码什么都问,我会晕,基本上我都已经注解了。

CSeqStack.h
  1. /* 头文件 */
  2. #include <memory>
  3. using namespace std;

  4. class CSeqStack
  5. {
  6.         /* 私有成员 */
  7.     unique_ptr<int[]>stackArray; // C++11
  8.     int capacity;
  9.     int top;
  10.    
  11.         public:
  12.                
  13.             CSeqStack(int capacity); // 构造函数
  14.             ~CSeqStack(); // 析构函数
  15.             
  16.             /* 公共成员 */
  17.             void push(int value);
  18.             void pop (int &value);
  19.             bool isEmpty() const;
  20.             bool isFull() const;
  21.             
  22.             /* 堆栈异常 */
  23.             class Overflow {};
  24.             class Underflow {};
  25. };
复制代码
CSeqStack.cpp
  1. /* 源文件 */
  2. #include "CSeqStack.h"

  3. CSeqStack::CSeqStack(int capacity){
  4.     stackArray = make_unique<int[]>(capacity); // C++14
  5.     this->capacity = capacity;
  6.     top = 0;
  7. }

  8. /* (g)析构函数 */
  9. CSeqStack::~CSeqStack(){}

  10. void CSeqStack::push(int value){
  11.     if (top == capacity)
  12.         throw CSeqStack::Overflow();
  13.     stackArray[top] = value;
  14.     top++;
  15. }

  16. bool CSeqStack::isEmpty() const{ return top == 0; }

  17. bool CSeqStack::isFull() const{ return top >= capacity; }

  18. void CSeqStack::pop(int &value){
  19.     if (isEmpty()) throw CSeqStack::Underflow();
  20.     top--;
  21.     value = stackArray[top];
  22. }
复制代码
main.cpp
  1. /* 这是主文件 */
  2. #include "CSeqStack.h"
  3. #include <iostream>

  4. using namespace std;

  5. int main()
  6. {
  7.     /* (a)无参构造函数,初始化一个空栈,最多可存放100个元素*/
  8.     CSeqStack stack(100);
  9.        
  10.     /* (b)拷贝构造函数,初始化一个传入栈对象的拷贝 */
  11.     CSeqStack *p = &stack;
  12.        
  13.     int value, num;
  14.    
  15.     /* (c)压栈操作 */
  16.     cout << "压栈操作...\n";
  17.     while(scanf("%d", &num)){
  18.         if(!num) break;
  19.                 p->push(num);
  20.         cout << num << " ";
  21.         }
  22.        
  23.     /* (d)弹栈操作 */
  24.     cout << "\n弹栈操作...\n";
  25.     while (!p->isEmpty()){
  26.         p->pop(value);
  27.         cout << value << " ";
  28.     }
  29.    
  30.     /* (e)判栈空操作,栈中元素为 0 返回 true,否则返回 false; */
  31.     cout << endl << "栈是否空?:" << (bool)p->isEmpty()<< endl;
  32.        
  33.     /* (f)判栈空操作,栈中元素 ≥100 返回 true,否则返回 false; */
  34.     cout << "栈是否满?:" << (bool)p->isFull()<< endl;
  35.    
  36.     cout << endl;
  37.     return 0;
  38. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-28 19:11:08 | 显示全部楼层
傻眼貓咪 发表于 2021-12-28 19:03
我的代码有三点必须注意:
1.)采用头文件和源文件编写,在运行之前,请自行确保路径与设定无误(不要问我 ...

谢谢,分享
关于第三点为什么跳跃,属实一两句话说不完,一言难尽。
本来要发悬赏的,现在等级不够,不能悬赏渔币,再次感谢分享!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-28 19:12:44 | 显示全部楼层
学不会绝不改名 发表于 2021-12-28 19:11
谢谢,分享
关于第三点为什么跳跃,属实一两句话说不完,一言难尽。
本来要发悬赏的,现在等 ...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 14:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表