河北工业大学14年面向对象程序设计实验报告(内含完整程序)

更新时间:2024-07-05 06:41:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C++面向对象程序设计实验报告

班级:计C122 姓名:张健 学号:126123

共29 页,第 1页

实验一 C++程序设计基础练习

参考程序1

#include int main() {

char name[20];

cout<<”Hello,your name:”;

//在下画线处填上语句,完成将字符串输入到数组name中 cin>>name;

//在下画线处填上语句,完成将name数组用cout输出 cout<

参考程序2

# include void main() {

int x=25;

共29 页,第 2页

//在画线处填上语句,将变量x的值分别以十六进制、十进制、八进制输出 cout<

2、调试和运行参考程序3,理解内置函数与函数重载的概念与基本使用方法。 参考程序3

#include

int mul(int x,int y) //mul函数1 { return x*y; }

int mul(int x,int y,int z) //mul函数2 { return x*y*z; } void main() {

int a=3,b=4,c=5;

//在下画线处填上语句,用于调用mul函数1 cout<

3、调试和运行参考程序4,并观察输出结果,体会和理解作用域运算符的概念与基本使用方法。

共29 页,第 3页

参考程序4

#include int avar; main() {

int avar;

avar=25; //将局部变量avar赋值25 ::avar=10; //将全局变量avar赋值10

cout<<\输出局部变量avar的值 cout<<\输出全局变量avar的值 return 0; }

4、调试和运行参考程序5,并观察输出结果,体会和理解内存动态分配的概念与new、delete运算符的基本使用方法。

参考程序5

#include main() {

int *p;

//在画线处填上语句,用new关键字动态分配一个int型存储区,并将首地址赋给

p

p=new int;

共29 页,第 4页

if (!p) {

cout<<\return 1; }

//在下画线处填上语句,将p所指向的存储区赋值20 *p=20; cout<<*p;

//在下画线处填上语句,用于撤销指针p,释放p指向的存储空间 delete p; return 0; }

(二)程序设计题

1、输出1到100的偶数,一行5个。 #include void main() { int i,j;

for(i=1;i<=100;i++) {

共29 页,第 5页

if(i%2==0) {

cout<

cout<

2、打印一个三角形的1~9的乘法表。 #include void main() { int i,j,s;

for(i=1;i<=9;i++) {

共29 页,第 6页

for(j=1;j<=i;j++) { s=i*j;

cout<

cout<

??578?????4?23?????2?24?394??????111???8?12???????。 3、编程求矩阵的加法:

#include int main() { int i,j;

int a[3][3]={5,7,8,2,-2,4,1,1,1},b[3][3]={4,-2,3,3,9,4,8,-1,2},c[3][3]; for(i=0;i<3;i++)

共29 页,第 7页

{

for(j=0;j<3;j++) {

c[i][j]=a[i][j]+b[i][j]; cout<

cout<

4、编写一个程序,用来分别求2个整数、3个整数、2个双精度数和3个双精度数的最大值。要求使用重载函数来完成。

#include void max(int x,int y) { if(x>y)

cout<<\个整数的最大值 \else

cout<<\个整数的最大值\

共29 页,第 8页

void max(int x,int y,int z) { int max; if (x>y) max=x; else max=y; if (z>max)

cout<<\个整数的最大值\else

cout<<\个整数的最大值\}

void max(double x,double y) { if(x>y)

cout<<\个双精度数的最大值\else

cout<<\个双精度数的最大值\void max(double x,double y,double z) { int max; if (x>y) max=x; else max=y; if (z>max)

cout<<\个双精度数的最大值\else

cout<<\个双精度数的最大值\} int main()

共29 页,第 9页

{

int a,b,c,d,e; float f,g,h,i,j;

cout<<\请输入2个整数:\cin>>a>>b; max(a,b); cout<

cout<<\请输入3个整数:\cin>>c>>d>>e; max(c,d,e); cout<

cout<<\请输入2个双精度数的最大值:\cin>>f>>g; max(f,g); cout<

cout<<\请输入3个双精度数的最大值:\cin>>h>>i>>j; max(h,i,j); cout<

共29 页,第 10页

实验二 类与对象

一、实验目的

1、学习类与对象的定义,掌握类与对象的使用方法。

2、学习数据成员与成员函数的访问方式,理解构造函数和析构函数的定义与执行过程,学会构造函数的重载方法。

3、掌握数组与指针的定义与使用方法,理解数组与指针的存储分配与表示。 4、掌握用指针和引用向函数传递参数。 5、掌握静态数据成员和静态成员函数的使用。 6、理解友元与友元函数的作用与使用方法。 二、实验内容

1、下面是一个计算器类的定义,请完成该类成员函数的实现。 #include class Counter{ public:

Counter(int number);

void increment(); //给原值加1 void decrement(); //给原值减1 int getValue(); //取得计数器值

共29 页,第 11页

int print(); //显示计数 private: int value; };

Counter::Counter(int number) //计数 { value=number; }

void Counter::increment() //给原值加1 { value=value+1; }

void Counter::decrement() //给原值减1 { value=value-1; }

int Counter::getValue() //取得计数器值 { return value; }

int Counter::print() //显示计数 {

cout<<\计数器的值为\return 0; }

int main(){ Counter a(100); a.increment(); a.decrement();

cout<<\a.print(); return 0; }

共29 页,第 12页

2、构建一个购书清单类booklist,其中含有私有数据成员bookname(书名)、price(单价)、sum(总价),建立一个有5个元素的对象数组,接受5个以内图书信息,并输出图书信息和总价格。

#include using namespace std; class booklist {

char bookname[20]; double price; static double sum; public:

booklist(char *bn=0, double bp=0) { if(bn!=0) {

strcpy(bookname,bn); price=bp; sum+=price;

共29 页,第 13页

} }

void input() {

cout <<\cin >>bookname; cout <<\cin >>price; sum+=price; }

void output() {

cout <<\}

static void out_sum() {

cout <<\}

};double booklist::sum=0; int main() { int i;

booklist bs[5]; for(i=0; i<5; i++) bs[i].input(); for(i=0; i<5; i++) bs[i].output(); booklist::out_sum(); return 0; }

共29 页,第 14页

3、参考课本例子,建立一个源程序文件,在此文件中建立一个新的类,将新建的类命名为Rect。 class Rect { public: int Area_int(); double Area_double();

Rect(double length,double width); Rect(int length,int width); virtual ~Rect(); private: int nLength; int nWidth; double dLength; double dWidth; };

【要求】

(1)向Rect类中添加数据成员及成员函数,并完善成员函数的功能。如设计一个

共29 页,第 15页

Area_int()函数,计算边长为整型的长方形的面积;设计一个Area_double()函数,计算边长为double型的长方形的面积。

(2)重载构造函数。一种构造函数用整型变量记录长方形的长和宽,另一种构造函数用double型记录。

(3)体现对象的构造和析构过程。例如,在构造函数中用cout<<”I am the constructor!”<

(4)在main()函数中定义两个Rect类的对象,一个对象用实例实现(就像定义普通的变量一样),另一个对象用指针实现(利用关键字new,给指针分配内存空间)。并用不同的参数,以调用不同的构造函数体现构造函数的重载。

# include using namespace std; class Rect { public:

int Area_int(); double Area_double(); Rect(double l, double w); Rect(int l,int w);

private: };

Rect::Rect(int l,int w){ }

Rect::Rect(double l,double w){

dLength=l;

共29 页,第 16页

int nLength; int nWidth; double dLength; double dWidth;

nLength=l; nWidth=w;

}

int Rect::Area_int(){ }

double Rect::Area_double(){ }

void main(){

Rect r1(20,8);

return dLength*dWidth; return nLength*nWidth; dWidth=w;

Rect r2(20.0,8.0); Rect r3();

Rect *pt;

pt=new Rect(100,300);

cout<<\面积三\cout<

cout<<\面积一\

cout<<\面积二\ }

cout<

共29 页,第 17页

4、声明一个Student,在该类中包括一个数据成员score(分数)、两个静态数据成员total_score(总分)和count(学生人数);还包括一个成员函数account()用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum()用于返回学生的成绩之和,另一个静态成员函数average()用于求全班成绩的平均值。在main()函数中,输入某班学生的成绩,并调用上述函数求出全班学生的成绩之和和平均分。

#include class Student { public:

void account(int x) { score=x;

total_score+=score; count+=1; }

static int sum() {

return total_score; }

共29 页,第 18页

static int average()

{ return (double)total_score/count; } private: int score;

static int total_score; static int count; };

int Student::total_score=0; int Student::count=0; int main() { Student a[5]; int i=0; int j;

for(i=0;i<5;i++) {

cout<<\输入第\个人的成绩:\cin>>j; a[i].account(j); cout<

cout<<\总分为:\cout<<\平均分:\}

共29 页,第 19页

5、设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离,要求按如下格式输出结果:

A(x1,y1),B(x2,y2) Distance=d

其中:x1、y1、x2、y2为指定的坐标值,d为两个坐标点之间的距离。 #include #include class Location { public:

Location(double,double); double getx(); double gety();

double distance(Location &);

friend double distance(Location & , Location &); private: double x,y; };

Location::Location(double r,double i)

共29 页,第 20页

{ x=r; y=i; }

double Location::getx() {return x; } double Location::gety() {return y; } double Location::distance(Location &t) { double dx=x-t.x; double dy=y-t.y;

return sqrt(dx*dx+dy*dy); }

double distance(Location &a , Location &b) { double dx=a.x-b.x; double dy=a.y-b.y;

return (sqrt(dx*dx+dy*dy)); } int main() {

Location A(-1,-1); Location B(-2,2);

cout<<\l;

double d=A.distance(B); cout<<\return 0; }

共29 页,第 21页

实验三 派生类与继承

一、实验目的

1、学习类的继承,能够定义和使用类的继承关系。 2、学习派生类的声明与定义方法。 3、掌握类的定义和对象的声明。 4、熟悉公有派生和私有派生的访问特性。 5、掌握派生类构造函数和析构函数的执行顺序。

6、掌握利用访问声明调整基类成员在派生类中的访问属性。 二、试验内容

1、已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。 #include #include using namespace std; class Time {

public:

Time(int h,int m, int s) {

hours=h;

共29 页,第 22页

minutes=m; seconds=s; }

void display() {

cout<<\出生时间:\时\分\秒\}

protected:

int hours,minutes,seconds; };

class Date {

public:

Date(int m,int d,int y) {

month=m; day=d; year=y; }

void display() {

cout<<\出生年月:\年\月\日\}

protected:

int month,day,year; };

class Birthtime:public Date,public Time {

public:

Birthtime(string cn,int yy,int mm,int dd,int hh,int mint,int ss):Date(yy,mm,dd),Time(hh,mint,ss) {

//strcpy(childname,cn); childname=cn; }

void display() {

cout<<\姓名:\Date::display(); Time::display(); }

private:

string childname; };

共29 页,第 23页

int main() {

Birthtime ys(\张健\ys.display(); return 0; }

2、编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。

#include #include using namespace std; class person {

private: int no;

string name; public:

void input() {

cout<<“请输入编号和姓名:”;cin>>no>>name;} void display()

{cout<<“编号: ”<

共29 页,第 24页

cout<<“姓名: ”<

class student: public person {private: int bh,score; public: void get() {input();

cout<< “请输入班号和成绩:”; cin>>bh>>score; }

void show() {display();

cout<<“班号: ”<

class teacher: public person {

private:

string zc,bm; public: void get() {

input(); cout<< “请输入职称和部门:”; cin>>zc>>bm; }

void show( ) {

display();

cout<<“职称: ”<

int main( ) {

student s; teacher t; s.get( ); s.show( ); t.get( ); t.show( ); return 0; }

共29 页,第 25页

3、给出下面的基类: class area {

protected: double height; double width; public:

area(double h,double w) {

height=h; width=w; }

virtual double getarea()=0; };

【要求】

(1)建立基类area的俩个派生类rectangle与isosceles,让每一个派生类都包含一个函数getarea(),分别用来返回矩形与三角形的面积。用构造函数对height与width进行初始化。

(2)写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。

(3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。

共29 页,第 26页

#include class area_cl{ protected: double height; double width; public:

area_cl(double r, double s) {height=r;width=s;} virtual double area()=0; };

class rectangle:public area_cl{ public:

rectangle(double r,double s):area_cl(r,s){}; double area()

{ return height*width/2;} };

class isosceles:public area_cl{ public:

isosceles(double r,double s):area_cl(r,s){}; double area() {

return height*width; } }; int main() {

rectangle rec(10.0,5.0); isosceles iso(4.0,6.0); area_cl *area1=&rec; area_cl *area2=&iso;

共29 页,第 27页

cout<<\三角形面积是\矩形面积是\

return 0; }

实验报告要求

每人针对每个实验上交一份实验报告,不接受不完整的实验报告,或者说明与程序或结果不符合的实验报告。

实验报告主要包括四方面内容: ⑴ 实验内容 实验题目与要求。 (2) 程序清单

实验实现的源程序,要求符合代码行首缩进、单句代码换行、标识符命名合理,并包括必要的注释。 (3)运行结果

原始数据,程序运行结果截图及说明。

(4) 实验总结

共29 页,第 28页

调试过程及调试中遇到的问题及解决办法;调试程序的收获心得与体会,分析不足之处。

共29 页,第 29页

本文来源:https://www.bwwdw.com/article/1gq.html

Top