第五次课程作业

第五次课程作业

作业要求

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

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

Github链接

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

三个类分别用.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.定义栈: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() << "	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;

}

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

原文地址:https://www.cnblogs.com/heihuifei/p/6896085.html