实验1 C++基础以及抽象数据类型
实验1 C++基础以及抽象数据类型
一、题目
第一题: 减法
【题目描述】
给两个正整数 A 和B ,输出它们的差C=A-B。
【输入】
输入仅包含一行,有两个正整数 A 和B 。
【输出】
输出仅包含一行,有一个正整数 C。
【样例输入】
100 200
【样例输出】
-100
第二题: 用C++的类声明定义“复数”的抽象数据类型
【题目描述】
试用C++的类声明定义”复数”的抽象数据类型. 要求:
(1) 在复数内部用浮点数定义它的实部和虚部。
(2) 实现一个构造函数:将两个双精度浮点数分别赋给复数的实部和虚部。
(3) 定义获取和修改复数的实部与虚部,以及+法运算的成员函数。
(4) 定义重载的流函数来输出一个复数。
【输入】
输入包含2行,每行包含有两个浮点数,每行表示一个复数,第一个浮点数是实部,第二个浮点数是虚部。
【输出】
输出求和之后的复数。
【样例输入】
1.45 2.78
2.1 3.2
【样例输出】
3.55+5.98i
二、程序清单
1、
#include
#include
template //函数模板
T Sub(T a,T b)
{
return (a-b);
}
int main()
{
int a,b;
2、 cout>a>>b; cout
//Ch_1.h
template //类模板
class Complex
{
public:
Complex(T a, T b) //构造函数,将两个双精度浮点数分别赋给复数的实部和虚部。
{
x = a;
y = b;
}
T get_x() //获取该复数的实部和虚部
{
return x;
}
T get_y()
{
return y;
}
void put_x(T a) //修改复数的实部与虚部
{
x=a;
}
void put_y(T b)
{
y=b;
}
Complex operator+(Complex p); //"+"运算符重载
private:
T x;
T y;
};
//Ch_1.cpp
#include
#include
#include"Ch_1.h"
template
Complex Complex::operator+ (Complex p)
{
return Complex(x + p.x, y + p.y);
}
template
istream& operator>>(istream& in, Complex& p) //输入流重载 {
double a, b;
cout
cin >> a >> b;
p.put_x(a);
p.put_y(b);
return in;
}
template
ostream&operator& p) //输出流重载 {
cout
double a,b;
a=p.get_x();
b=p.get_y();
coutreturn output;
}
int main() //主函数
{
Complex p1(0,0),p2(0,0);
cin>> p1;
cin>> p2;
Complex p3 = p1+p2;
cout
return 0;
system("pause");
}
三、程序调试过程中所出现的错误
1、无
2、Ch_1.cpp
D:\Ch_1\Ch_1.cpp(31) : error C2143: syntax error : missing ';' before '&' D:\Ch_1\Ch_1.cpp(31) : error C2501: 'istream' : missing storage-class or type specifiers
D:\Ch_1\Ch_1.cpp(31) : error C2061: syntax error : identifier 'istream' D:\Ch_1\Ch_1.cpp(32) : error C2501: '>>' : missing storage-class or type specifiers
D:\Ch_1\Ch_1.cpp(32) : error C2809: 'operator >>' has no formal parameters
D:\Ch_1\Ch_1.cpp(34) : error C2065: 'cout' : undeclared identifier
D:\Ch_1\Ch_1.cpp(34) : error C2297: '
D:\Ch_1\Ch_1.cpp(34) : error C2065: 'endl' : undeclared identifier D:\Ch_1\Ch_1.cpp(35) : error C2065: 'cin' : undeclared identifier
D:\Ch_1\Ch_1.cpp(35) : warning C4552: '>>' : operator has no effect; expected operator with side-effect
D:\Ch_1\Ch_1.cpp(36) : error C2065: 'p' : undeclared identifier
D:\Ch_1\Ch_1.cpp(36) : error C2228: left of '.put_x' must have class/struct/union type
D:\Ch_1\Ch_1.cpp(37) : error C2228: left of '.put_y' must have class/struct/union type
D:\Ch_1\Ch_1.cpp(38) : error C2065: 'in' : undeclared identifier
D:\Ch_1\Ch_1.cpp(44) : error C2677: binary '>>' : no global operator defined which takes type 'class Point' (or there is no acceptable conversion)
D:\Ch_1\Ch_1.cpp(45) : error C2677: binary '>>' : no global operator defined which takes type 'class Point' (or there is no acceptable conversion)
Ch_1.obj - 15 error(s), 2 warning(s)
四、运行结果:
1、
2、
五、心得体会
1、本次实验主要是让我们复习巩固C++的知识,在有了将近一年的时间没有接触C++,遗忘了很多,此次实验帮助我回顾了之前的知识。C++的输入、输出,模板,类,构造函数,重载等都有了新的认识和掌握,特别是运算符的重载,在“>”重载练习中,重新学会了运算符重载的方法及运用。
2、在第二个程序中,在调试是出现了许多问题,主要的问题是“
3、还有在类模板中也出现了一些问题,之前在cpp 文件中重载“,之前调试许久都没有发现这个问题,后来仔细和书中例题对比才
发现。细节是非常重要的,要注重细节。
4、通过此次实验也发现了一些问题,程序的编写能力比较低,在以后要勤动手,努力练习。