1,类 ModClass 仅有一个整数资料成员 dataval,其取值范围为
0~6,构造函数取任意正整数 v,将 v 除以 7 后的余数赋值给
dataval,dataval = v % 7;
加法运算符 + 实现两个对象相加,将两个对象的 dataval
的值相加后并取除 7后的余数
例如, ModClass a(10),ModClass b(6),c;
c = a + b; // (3+6)/7 = 2;
class ModClass {
private:
int dataval;
public:
ModClass(int v=0);
ModClass operator+(const ModClass &x);
int GetValue(void);
}
(1) 实现以上类中各成员函数
(2) 以友元的形式声明并实现运算符 *,该运算符将两个对象的
dataval 值相乘后取除以 7的余数
(3) 写一个函数 ModClass Inverse(ModClass &x)
形参 x 的 dataval取非 0值,该函数返回对象 y,使其满足 x*y
= 1(y 称为 x 的倒置 ),(提示,将值为 1~6的对象依次跟对象
x 相乘,满足条件的其中之一就是 x 的倒置 )
(4) 重载类型转换函数 operator int(); 用于取代 GetValue().该
运算符通过返回 dataval 的值将一个 ModClass 类型对象转
换为一个整数
(5) 写一个函数
void Solve(ModClass a,ModClass &x,ModClass b);
用于求 关于 x 的方程 ax = b
ModClass::ModClass(int v) {
dataval = v % 7;
}
ModClass ModClass::operator+(const ModClass &x) {
return ModClass(dataval + x.dataval);
}
int ModClass::GetValue(void) {
return dataval;
}
ModClass operator*(const ModClass &x,const ModClass &y) {
return ModClass(x.dataval * y.dataval);
}
ModClass::operator int() {
return dataval;
}
ModClass Inverse(ModClass &x) {
ModClass prod,value;
for(int i=1; i < 7; i ++) {
value = ModClass(i);
prod = x * value;
if(prod.GetValue() == 1) break;
}
return value;
}
void Solve(ModClass a,ModClass &x,ModClass b) {
x = b * Inverse(a);
}
void main() {
ModClass a(10),b(6),c,d,x;
c = a + b;
d = a * b;
cout <<,a=,<< int(a) <<,,b=,<< int(b) << endl;
cout <<,a+b=,<< c.GetValue() << endl;
cout <<,a*b=,<< int(d) << endl;
Solve(a,x,b);
cout <<,x=,<< int(x) << endl;
}
2,编写一个模板函数 Copy
template <class T>
void copy(T a[],T b[],int n); // 数组 b复制到 a,写一个主程
序测试 copy 函数
(1) int Aint[6],Bint[6] = {1,3,5,7,9,11};
(2) struct Student {
int num;
double score;
};
Student Astudent[3];
Student Bstudent[3] = {{100,88},{110,76},{130,92}};
template <class T>
void copy(T a[],T b[],int n) {
for(int i = 0; i < n; i ++)
*a++ = *b ++;
}
struct Student {
int num;
double score;
};
void main()
{ int Aint[6],Bint[6] = {1,3,5,7,9,11};
Student Astudent[3];
Student Bstudent[3] = {{100,88},{110,76},{130,92}};
copy(Aint,Bint);
copy(Astudent,Bstudent);
for(int i=0; i<6; i++) cout << Aint[i] <<,,;
cout << endl;
for(int i=0; i<6; i++) {
cout << Astudent[i].num <<,, << Astudent[i].score
<<,,“;
}
cout << endl;
}
3,编写一个模板类 DataStore,该类具有以下一些数据成员
int Insert(T elt):向具有 5个 T类型的元素的私有数组
dataElement 中插入元素 elt,数组中下一个可插入的位置
由数据成员 loc 给出,loc 也是数组中数据个数,如果数组
中没有剩余空间,则返回 0;
int Find(T elt):在数组中查找元素 elt,如果找到,则返回该元
素在数组中的下标,否则返回 -1
int NumElts(void):返回数组中存储元素个数
T &GetData(int n):返回数组中位置 n处元素,如果 n超出返回,
则警告,