};
voidmain()
{
CPUa(P6,300,2.8);
a.Run();
a.Stop();
}
3.调试操作步骤如下:
Ø单击Build|StartDebug|StepInto命令,或按下快捷键F11,系统进入单步执行状态,程序开始运行,一个DOS窗口出现,此时VisualStudio中光标停在main()函数的入口处;
Ø从Debug菜单或Debug工具栏中单击StepOver,此时,光标下移,程序准备执行CPU对象的初始化;
Ø单击StepInto,程序准备执行CPU类的构造函数;
Ø连续单击StepOver,观察构造函数的执行情况,直到执行完构造函数,程序回到主函数;
Ø此时程序准备执行CPU对象的run()方法,单击StepInto,程序进入run()成员函数,连续单击StepOver,直到回到main()函数;
Ø继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、析构函数、成员函数的执行顺序的认识;
Ø再试试Debug菜单栏中别的菜单项,熟悉Debug的各种方法。
4.首先定义CPU类(可使用第二题中的CPU类)、RAM类、CDROM类。
再定义Computer类:
定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop,可在其中输出提示信息。
在主程序中定义一个Computer的对象,调用其成员函数,观察类对象及其成员变量的构造与析构顺序,以及成员函数的调用。
程序名:
lab4_2.cpp。
5.使用debug调试功能观察lab4_2.cpp程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。
实验2数组、指针与字符串
一、实验目的
1.学习使用数组数据对象;
2.学习字符串数据的组织和处理;
3.学习标准C++库的使用;
4.掌握指针的使用方法;
5.练习通过debug观察指针的内容及其所指的对象的内容;
6.练习通过动态内存分配实现动态数组,并体会指针在其中的作用;
7.分别使用字符数组和标准C++库练习处理字符串的方法。
二、实验任务
1.编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。
2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。
3.编程实现两字符串的连接。
要求使用字符数组保存字符串,不要使用系统函数。
4.使用string类定义字符串对象,重新实现上一小题。
5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。
display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。
6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。
7.(选做)修改实验四中的选做实验中的people(人员)类。
具有的属性如下:
姓名charname[11]、编号charnumber[7]、性别charsex[3]、生日birthday、身份证号charid[16]。
其中“出生日期”定义为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:
构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。
在测试程序中定义people类的对象数组,录入数据并显示。
三、实验步骤
1.编写矩阵转置函数,输入参数为3×3整型数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。
程序名:
lab6_1.cpp。
2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。
通过debug观察指针的内容及其所指的对象中的内容。
程序名:
lab6_2.cpp。
3.编程实现两字符串的连接。
定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。
程序名:
lab6_3.cpp。
用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。
4.使用string类定义字符串对象,编程实现两字符串的连接。
在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。
程序名:
lab6_4.cpp。
5.在employee.h文件中定义Employee类。
Employee类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符型数组来表示,在成员函数中,构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char*,char*name);display()中使用cout显示姓名、街道地址、城市和邮编等属性,change_name()改变类中表示姓名属性的字符数组类型的数据成员。
在主程序中定义这个类的对象并对其进行操作。
程序名:
lab6_5.cpp。
6.使用上一小题中定义的Employee类定义对象数组emp[5],使用循环语句把数据显示出来。
程序名:
lab6_6.cpp。
实验3运算符重载
一、实验目的
1.掌握运算符重载的方法;
2.掌握运算法重载的规则;
3.学习类型转换运算符。
二、实验任务
1.定义一个复数complex类型,虚部和实部为私有数据类型;
2.重载加法运算符,减法运算符,+=运算符。
3.重载一元负号和一元正号。
4.重载输入、输出运算符。
5.定义类型转换运算符函数,将复数类型转换成double类型。
三、实验步骤
1.参考教材。
Classcomplex{
Doublere,im;
Public:
Complex(doubler=0,doubleI=0):
re(r),im(i){};
Doublereal()const{returnre;}
Doubleimag()const{returnim;}
Complex&operator+=(complex);
Complex&operator+=(double);
}
complexoperator+(complex,complex);
complexoperator+(complex,double);
complexoperator+(double,complex);
complexoperator-(complex,complex);
complexoperator-(complex,double);
complexoperator-(double,complex);
complexoperator+(complex);
complexoperator-(complex);
istream&operator>>(istream&,complex&);
ostream&operator>>(ostream&,complex&);
2.编写main函数,测试复数类型。
实验4继承与派生
一、实验目的
1.学习定义和使用类的继承关系,定义派生类;
2.熟悉不同继承方式下对基类成员的访问控制;
3.学习利用虚基类解决二义性问题。
二、实验任务
1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?
编程试试看。
2.定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。
3.定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。
自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。
从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题?
编程试试看。
4.(选做)从实验6中的people(人员)类派生出student(学生)类,添加属性:
班号charclassNO[7];从people类派生出teacher(教师)类,添加属性:
职务charprincipalship[11]、部门chardepartment[21]。
从student类中派生出graduate(研究生)类,添加属性:
专业charsubject[21]、导师teacheradviser;从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。
重载相应的成员函数,测试这些类。
类之间的关系如下图所示:
图7-1类图
三、实验步骤
1.编写程序定义基类Animal,成员变量age定义为私有的。
构造派生类dog,在其成员函数SetAge(intn)中直接对age赋值时,会出现类似以下的错误提示:
errorC2248:
'age':
cannotaccessprivatememberdeclaredinclass'Animal'
errorC2248:
'age':
cannotaccessprivatememberdeclaredinclass'Animal'
把age改为公有成员变量后重新编译就可以了。
程序名:
lab7_1.cpp。
2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。
程序名:
lab7_2.cpp。
3.用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。
4.编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。
再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。
程序名:
lab7_3.cpp。
编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。
这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。
实验5多态性
一、实验目的
1.掌握运算符重载的方法;
2.学习使用虚函数实现动态多态性。
二、实验任务
1.定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“--”(自减)运算符,实现对坐标值的改变。
2.定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
观察虚函数的作用。
3.(选做)对实验六中的people类重载“==”运算符和“=”运算符,“==”运算符判断两个people类对象的id属性的大小;“=”运算符实现people类对象的赋值操作。
三、实验步骤
1.编写程序定义Point类,在类中定义整型的私有成员变量_x、_y,定义成员函数Point&operator++();Pointoperator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--();Pointoperator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。
程序名:
lab8_1.cpp。
2.编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。
再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。
程序名:
lab8_2.cpp。
实验6流类库与输入/输出
一、实验目的
1.熟悉流类库中常用的类及其成员函数的用法。
2.学习标准输入输出及格式控制;
3.学习对文件的应用方法(二进制文件、文本文件)。
二、实验任务
1.观察以下程序的输出,注意对输出格式的控制方法;
//lab11_1.cpp
#include
usingnamespacestd;
#defineD(a)T<<#a<ofstreamT("output.out");
voidmain(){
D(inti=53;)
D(floatf=4700113.141593;)
char*s="Isthereanymore?
";
D(T.setf(ios:
:
unitbuf);)
D(T.setf(ios:
:
showbase);)
D(T.setf(ios:
:
uppercase);)
D(T.setf(ios:
:
showpos);)
D(T<
D(T.setf(ios:
:
hex,ios:
:
basefield);)
D(T<
D(T.unsetf(ios:
:
uppercase);)
D(T.setf(ios:
:
oct,ios:
:
basefield);)
D(T<
D(T.unsetf(ios:
:
showbase);)
D(T.setf(ios:
:
dec,ios:
:
basefield);)
D(T.setf(ios:
:
left,ios:
:
adjustfield);)
D(T.fill('0');)
D(T<<"fillchar:
"<D(T.width(8);)
T<
D(T.setf(ios:
:
right,ios:
:
adjustfield);)
D(T.width(8);)
T<
D(T.setf(ios:
:
internal,ios:
:
adjustfield);)
D(T.width(8);)
T<
D(T<
D(T.unsetf(ios:
:
showpos);)
D(T.setf(ios:
:
showpoint);)
D(T<<"prec="<D(T.setf(ios:
:
scientific,ios:
:
floatfield);)
D(T<D(T.setf(ios:
:
fixed,ios:
:
floatfield);)
D(T<D(T.setf(0,ios:
:
floatfield);)//Automatic
D(T<D(T.precision(16);)
D(T<<"prec="<D(T<D(T.setf(ios:
:
scientific,ios:
:
floatfield);)
D(T<D(T.setf(ios:
:
fixed,ios:
:
floatfield);)
D(T<D(T.setf(0,ios:
:
floatfield);)//Automatic
D(T<D(T.width(8);)
T<
D(T.width(36);)
T<
D(T.setf(ios:
:
left,ios:
:
adjustfield);)
D(T.width(36);)
T<
D(T.unsetf(ios:
:
showpoint);)
D(T.unsetf(ios:
:
unitbuf);)
}
2.编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。
3.(选做)使用实验十中的学生类数组,输入数据,显示出来,使用I/O流把此数组的内容写入磁盘文件,再显示出文件内容。
三、实验步骤
1.观察题目中程序的输出,学习对输出格式的控制方法;尝试更改输出语句中的参数,以加深对输出格式的理解;
2.编写程序lab11_2.cpp使用voidmain(intargc,char*argv[])函数中的参数传递操作的文件名,定义ofstream的对象对文件进行操作,使用getline成员函数读入数据,使用cout输出字符到文件。
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习资料等等
打造全网一站式需求
3.