主题:几个复杂的问题,谢谢请详细解答哦
1. 定义一个计算算术表达式的类Expression,该类能够对算术表达式进行分析、求值和打印。其中,表达式由整数和运算符+、-、*、/ 和()构成。类可以有如下的类似定义:
class Expression
{
private:
……
public:
Expression(const char*);
double GetValue();
void Print();
……
};
要求:
1) 构造函数Expression::Expression(const char*)的字符串参数就是有关的表达式。可以根据自己的要求增加定义任意形式和任意个数的构造函数。
2) 成员函数Expression::GetValue()返回表达式的值。
3) 成员函数Expression::Print()打印表达式及表达式的值。
4) 可以根据需要,自己增加类Expression的成员函数和成员变量。
程序中可能如下使用类Expression:
void main()
{
double val;
Expression Expr(“3+5/2”);
val = Expr.GetValue();
Expr.Print();
……
}
为了简化程序,我们不检测表达式的正误,即假设表达式总是正确(合法)的。
2. 定义一个实现两个大整数运算的类LINT,该类能实现两个100位以内的大整数进行分析、求值和打印。其中,求值仅要求实现两个大整数的加法和减法运算。类可以有如下的类似定义:
class LINT
{
private:
……
public:
LINT(const char*);
LINT operator +( const LINT& L);
void Print();
……
};
要求:
1) 构造函数LINT::LINT(char*)初始化该大整数。可以根据自己的要求增加定义任意形式和任意个数的构造函数。
2) 成员函数LINT::Print()打印两个大整数的运算值。
3) 可以根据需要,增加类LINT的成员函数和成员变量。
4) 类中的运算符重载方式,既可以重载为类的成员函数,也可以重载为类的友元函数。
5) 100位的大整数可以用数组或者链表来实现。当然也可以用你认为合适的数据结构。
程序中可能如下使用类LINT:
void main()
{
LINT L1, L2, L3;
L3 = L1 + L2;
L3.Print();
L3 = L1 – L2;
L3.Print();
……
}
假设L1=12345678900987654321,L2=9876543210。因此,需要考虑如何初始化大整数。
3. 在大学中,有如下几类人员:学生、教师、工人和在职读书的教师。请根据所学的继承方法,给出这几类人员的描述。要求:
1) 给出这几类成员的类描述。如定义类Student,其中有姓名,学号等你认为必须的数据和成员函数。成员函数仅给出接口和说明即可,不用实现。
2) 给出这几类成员的继承关系。注意,在所描述的继承过程中,你可以抽象出或者定义新的类。
3) 简要说明你为什么要这样设计类的继承关系?
4. 对照C++语言和C语言的相同和不同之处,简述面相对象的基本特征、面向对象程序设计和面向过程的程序设计之间的联系和区别。
class Expression
{
private:
……
public:
Expression(const char*);
double GetValue();
void Print();
……
};
要求:
1) 构造函数Expression::Expression(const char*)的字符串参数就是有关的表达式。可以根据自己的要求增加定义任意形式和任意个数的构造函数。
2) 成员函数Expression::GetValue()返回表达式的值。
3) 成员函数Expression::Print()打印表达式及表达式的值。
4) 可以根据需要,自己增加类Expression的成员函数和成员变量。
程序中可能如下使用类Expression:
void main()
{
double val;
Expression Expr(“3+5/2”);
val = Expr.GetValue();
Expr.Print();
……
}
为了简化程序,我们不检测表达式的正误,即假设表达式总是正确(合法)的。
2. 定义一个实现两个大整数运算的类LINT,该类能实现两个100位以内的大整数进行分析、求值和打印。其中,求值仅要求实现两个大整数的加法和减法运算。类可以有如下的类似定义:
class LINT
{
private:
……
public:
LINT(const char*);
LINT operator +( const LINT& L);
void Print();
……
};
要求:
1) 构造函数LINT::LINT(char*)初始化该大整数。可以根据自己的要求增加定义任意形式和任意个数的构造函数。
2) 成员函数LINT::Print()打印两个大整数的运算值。
3) 可以根据需要,增加类LINT的成员函数和成员变量。
4) 类中的运算符重载方式,既可以重载为类的成员函数,也可以重载为类的友元函数。
5) 100位的大整数可以用数组或者链表来实现。当然也可以用你认为合适的数据结构。
程序中可能如下使用类LINT:
void main()
{
LINT L1, L2, L3;
L3 = L1 + L2;
L3.Print();
L3 = L1 – L2;
L3.Print();
……
}
假设L1=12345678900987654321,L2=9876543210。因此,需要考虑如何初始化大整数。
3. 在大学中,有如下几类人员:学生、教师、工人和在职读书的教师。请根据所学的继承方法,给出这几类人员的描述。要求:
1) 给出这几类成员的类描述。如定义类Student,其中有姓名,学号等你认为必须的数据和成员函数。成员函数仅给出接口和说明即可,不用实现。
2) 给出这几类成员的继承关系。注意,在所描述的继承过程中,你可以抽象出或者定义新的类。
3) 简要说明你为什么要这样设计类的继承关系?
4. 对照C++语言和C语言的相同和不同之处,简述面相对象的基本特征、面向对象程序设计和面向过程的程序设计之间的联系和区别。