南昌大学面向对象程序设计实验报告
时间: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个随机牌。我回去又进一步改进,使程序能输出每个人的牌,开始建立一个二维数组,但是就是不行,回到宿舍改进一下,最终终于成功了。
通过这个实验,使我对于类的封装性,以及函数对类私有成员调用有了更深入的了解,感觉知识要深入理解。