第五次课程作业
作业要求
本次作业要求将程序写成.cpp和.h分离的形式
根据设计的类图进行编码,搭建主体框架
对上次的第四次课程作业构思四则运算我分的是三个类,编码实现:
三个类分别用.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)
2. 项目 –> 属性 –> 链接器 –> 命令行 –> 附加选项中 加 /force (VS编译器,这是稍微较好的解决方案)这样使得编译器在遇到重定义的时候自动忽略二次定义,但是如果第二个定义才是需要的,那程序运行就会出错了。
相关推荐博客:
http://www.cnblogs.com/VVingerfly/p/6056042.html
http://blog.sina.com.cn/s/blog_724ea5200100zhhd.html
栈的学习:
栈是特殊的线性表,满足先进后出原则;
使用标准库中的栈:
1.首先应包括相关的头文件:#include
2.定义栈:stack
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() << " excepted:" << 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;
}
有一个想法是之后自己重新实现一下这个四则运算软件的程序编码,定会学到更多。