南昌大学面向对象程序设计实验报告

来源:工作范文网 时间:2020-09-28 08:50:54

南昌大学面向对象程序设计实验报告

南昌大学实验报告

学生姓名: 郭银博 学 号: 5602211023 专业班级:自动化113班

实验类型:□ 验证 □ 综合 □ 设计 □ 创新 实验日期: 实验成绩:

实验一熟悉C++的上机环境

一.实验目的

1.初步了解C++程序的编译、连接和运行的过程。?

2.掌握和理解C++程序的结构。

二.实验内容

1.使用VC

2.运行一个简单的C++程序

?3.编程求出对象中两个数据的和与差

三.实验环境PC微机;Windows?

操作系统;VC程序集成环境。

四、实验程序

#include

class A

{

public:

A(){a=b=0;}

A(int a,int b)

{a=a;b=b;}

add(int a,int b)

{int c=a+b;

cout

#include

class A

{public:

A(char * st);

~A()

{cout

class Rational

{public:

Rational(int d,int n)

{

den=d;

num=n;

cout

class A

{

public:

A(int i,int j){a=i;b=j;}

void Move(int x,int y){a+=x;b+=y;}

void Show(){cout

class A

{public:

A()

{x=y=0;

cout

class A

{public:

A(){ver='A';}

virtual void print()

{ coutprint();}

void main()

{

A a;

D1 d1(4);

D2 d2(100);

D3 d3(-25);

print_info(&a);

print_info(&d1);

print_info(&d2);

print_info(&d3);

}

五、实验结果分析:

这个实验是有关动态联编内容的,程序中开始定义了一个类A,又定义了一个类D1,它是对A的公有继承,又定义一个类D2,也是对A的共有继承,而累D3是对D1的公有继承。每个类都有一个输出函数,同名同参数、同返回值,但是A类中说明为虚函数,并且是通过一个函数(参数为A类指针),还满足子类型关系,满足了动态联编的条件,这就说明为动态联编。

把程序输进去,直至编译没有错误,运行,结果与分析结果一致。这就说明确实是采用的动态联编,根据调用的对象进行连接,就输出对应实参的相关数据。

通过书上几个题目、上机以及老师讲授,目前对静态联编和动态联编搞的差不多了,不会很模糊了。

南昌大学实验报告

学生姓名: 郭银博 学 号: 5602211023 专业班级:自动化113班

实验类型:□ 验证 □ 综合 □ 设计 □ 创新 实验日期: 实验成绩:

实验七 扑克牌游戏程序设计

一、实验目的:通过这个扑克牌游戏加深对c++的理解,学习函数封装思想。

二.实验内容

1.使用VC

2.利用所给函数,建立一个类,通过类编出一个程序实现扑克牌的发牌。

三.实验环境PC微机;Windows?

操作系统;VC程序集成环境。

四、实验程序

#include

#include

#include

enum suit {clubs, diamonds,hearts,spades};//花色枚举

typedef int pips;//牌数

struct card

{suit s; pips p;};

struct deck

{ card d[52];};

class A

{ public:

void init(){init_deck(deck1);}

void shuffle()

{shuffle(deck1);}

void deal()

{deal(52, 1, deck1.d, deck1);}

void print_deck()

{print_deck(deck1);}

void person();

void A::everyone();

pips assign_pips(int n);

suit assign_suit(int n);

void assign(int n, card& c);

void init_deck(deck& dk);

pips get_pip(card c);

suit get_suit(card c);

void print_card(card c);

void print_deck(deck& dk);

void shuffle(deck& dk);

void deal(int n, int pos, card* hand, deck& dk);

private:

deck deck1;

};

pips A::assign_pips(int n)//发牌数字

{ return (n%13+1);}

suit A::assign_suit(int n)//发牌花色

{

return (static_cast(n/13));

}

void A::assign(int n, card& c)//每人得到的牌

{

c.s= assign_suit(n);

c.p= assign_pips(n);

}

void A::init_deck(deck& dk)//初始化发牌

{

for (int i=0; i<52;++i)

assign(i, dk.d[i]);

}

pips A::get_pip(card c)//返回取得牌数

{

return c.p;

}

suit A::get_suit(card c)//返回取得花色

{

return c.s;

}

void A::print_card(card c)//输出每张牌

{

cout<<c.p;

switch(c.s)

{

case clubs:

cout<<C ;

break;

case diamonds:

cout<<D ;

break;

case hearts:

cout<<H ;

break;

case spades:

cout<<S ;

}

}

void A::print_deck(deck& dk)//一张一张输出每个人(所有)的牌

{

for (int i=0; i<52;++i)

print_card(dk.d[i]);

}

void A::shuffle(deck& dk)//洗牌(交换两张牌下标)

{

card t;

for (int i=0; i<52;++i)

{

int k=(rand()%(52-i));

t=dk.d[i];

dk.d[i]= dk.d[k];

dk.d[k]=t;

}

}

void A::deal(int n, int pos, card* hand, deck& dk)//发牌

{

for (int i=pos; i<pos+n; ++i)

hand[i-pos]=dk.d[i];

}

void A::person()

{

int n=0;

for(int j=0;j<13;j++)

{

for(int i=0;i<4,n++;i++)

d1[j][i]=deck1.d[n];

}

for(int m=0;m<4;m++)

{

for(int n=0;n<13;n++)

print_card(d1[n][m]);

//cout<<第<<i<<个人的牌:<<d1[i][j]<<endl;

}

}

void A::everyone()

{int n=0;

for(int i=0;i<4;i++)

{cout<<第<<++i<<个人的牌:;

i--;

for(int j=13*i;j<13*(i+1);j++)

print_card(deck1.d[j]);

cout<<endl;

}

}

void main()

{A a;

srand(time(NULL)); // seed rand() from time()

//struct deck1;

a.init();

a.shuffle();

//for(int b;b<12;b++)

a.deal();

a.print_deck();

cout<<endl;

a.everyone();

}

五、实验结果分析:

这是一个比较综合的实验,利用这学期所学知识,编写一个扑克牌游戏。之前所做实验都是某一个知识点的运用,并且真正自己写程序的很少,大多都是照书上写完运行。而这个实验要自己看懂,然后建立类,写主函数。

由于怕自己课上完不成,于是就课下先看了一下各个程序,读懂它的作用以及实现,并在各个程序后面进行了注释。

pips A::assign_pips(int n)//发牌数字

suit A::assign_suit(int n)//发牌花色

void A::assign(int n, card& c)//每人得到的牌

void A::init_deck(deck& dk)//初始化发牌

pips A::get_pip(card c)//返回取得牌数

suit A::get_suit(card c)//返回取得花色

void A::print_card(card c)//输出每张牌

void A::print_deck(deck& dk)//一张一张输出每个人(所有)的牌

void A::shuffle(deck& dk)//洗牌(交换两张牌下标)

void A::deal(int n, int pos, card* hand, deck& dk)//发牌

void A::everyone()//输出发给每个人的牌

上课后重新熟悉一下各个函数,开始编程,遇到不少问题,就一次次地根据错误提示进行修改,程序在不断减少,最后还有两个错误,就是说成员函数的参数没有定义,但是回去看,明明已经定义了。在老师帮助下搞明白了,因为参数为类 的私有成员,根据所学知识,只有成员函数才能对其进行操作。而它却不能直接作为成员函数的参数,解决方法就是在定义一个无参成员函数对这个成员函数进行调用,最终成功了。但是他只是输出52个随机牌。我回去又进一步改进,使程序能输出每个人的牌,开始建立一个二维数组,但是就是不行,回到宿舍改进一下,最终终于成功了。

通过这个实验,使我对于类的封装性,以及函数对类私有成员调用有了更深入的了解,感觉知识要深入理解。