第五次课程作业

第五次课程作业

作业要求

本次作业要求将程序写成.cpp和.h分离的形式

根据设计的类图进行编码,搭建主体框架

Github链接

对上次的第四次课程作业构思四则运算我分的是三个类,编码实现:

1093650-20170523130308398-1067698068.png

三个类分别用.h声明函数用.cpp定义函数(实现分离);

三个类声明

表达式类:

class Expression
{
private:
    string expression;
    string reversePolishNotation;
    int value;
public:

    Expression();
    ~Expression();

    int RandomNum();
    char RandomOperator();

    string & AddOperator(const char oper);
    string RandomPart();
    string & AddPart(const string & part);

    int PartValue(const string & part);
    Expression CreateInfixExpression();
    Expression ReversePolishNotation();
    int ExpressionValue();

    friend ostream & operator<<(ostream & os, const Expression &e);//重载<<运算符
};

栈类:

class Stack
{
private:
    int *Data;
    int posi;
public:
    Stack();
    ~Stack();
    bool empty() const;
    int top() const;
    bool push(const int & item);
    bool pop();
    int size();
};

用户类:

class User
{

public:
    int n;
    char language[200];
    char Langpath[255] = "";
    /*void setn(int number);
    void setLanguage(char* lang);
    void setLanpath(char* path);*/
    User()
    {}
    ~User()
    {}
    void WrongAgain();
    void MakeResource();
    void Print(int numRight, int numWrong, double accuracy);

};

这次的作业中遇到得问题:在进行类的.h和.cpp分离时,会出现报错,大体原因是程序中声明了多个.h文件,在调用的时候一个.h文件同时被多个.c调用的时候会出现重定义的问题,对这个我找了很久之后咨询了助教,然后意外的是问题没解决,却得知本次作业方向貌似出现了一些些小误差,但时间原因我就还是按照之前的理解完成的本次作业,之后再予以修改吧。
重定义问题:.h文件多次被调用的时候会出现其中的一些变量多次定义;

解决方案:

1.将这几个调用的.cpp文件合成一个文件(那样就又回到了之前的没有函数分块化的情况了hhh)

  1. 项目 –> 属性 –> 链接器 –> 命令行 –> 附加选项中 加 /force (VS编译器,这是稍微较好的解决方案)这样使得编译器在遇到重定义的时候自动忽略二次定义,但是如果第二个定义才是需要的,那程序运行就会出错了。
    相关推荐博客:
    http://www.cnblogs.com/VVingerfly/p/6056042.html
    http://blog.sina.com.cn/s/blog_724ea5200100zhhd.html

栈的学习:

栈是特殊的线性表,满足先进后出原则;

使用标准库中的栈:

1.首先应包括相关的头文件:#include
2.定义栈:stackstk
3.有如下操作:

s.empty()       如果栈为空返回true,否则返回false
s.size()        返回栈中元素的个数
s.pop()         删除栈顶元素但不返回其值
s.top()         返回栈顶的元素,但不删除该元素
s.push()        在栈顶压入新元素

使用自定义的栈:

1.首先定义一个栈类
2.自行编写栈内各个功能函数;
可参考以下代码:

class Stack
{
private:
    int *Data;
    int posi;
public:
    Stack();
    ~Stack();
    bool empty() const;
    int top() const;
    bool push(const int & item);
    bool pop();
    int size();
};

有关于栈的学习,这里直接贴一个我打的简单的程序代码:

#include<iostream>
#include<stack>

using namespace std;
int main()
{
    const int num_size = 10;
    int num[num_size] = { 0,1,2,3,4,5,6,7,8,9 };
    int i = 0;
    stack<int>intStack;  
    for (; i < num_size; i++)
    {
        intStack.push(num[i]);      //入栈
    }
    int error_count = 0;
    if (intStack.size() != num_size)
    {
        cout << "oops!,invalid intStack size:" << intStack.size() << "\texcepted:" << num_size << endl;
    }
    int value;
    while (intStack.empty() == false)
    {
        value = intStack.top();     //取栈顶元素
        if (value != -i)
        {
            cout << "oops!excepted " << i << "recieved " << value << endl;
            error_count++;
        }
        intStack.pop();     //弹出栈顶元素
    }
    cout << "Our program ran with " << error_count << "errors!" << endl;
    return 0;

}

1093650-20170523205100179-118124224.png

有一个想法是之后自己重新实现一下这个四则运算软件的程序编码,定会学到更多。

转载于:https://www.cnblogs.com/heihuifei/p/6896085.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值