快速业务通道

理解C++面向对象程序设计中的抽象理论

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
类成员数据的安全,主函数代码调用极其简单只有建立对象和调用对象方法的操作这两部而已,以后类一旦需要修改,只修改类体本身就可以,而主函数不需要做任何修改,这样就很好的做到了什么人做的事情什么人处理互不冲突。

程序的代码如下,我把工程文件压缩了作为此帖的附件提供下载,希望读者仔细阅读仔细推敲,真正理解面向对象oop编程的特点和意图。

主程序test4.cpp

#include <iostream>
#include "josephus.h"
using namespace std;
void main()
{
Josephus a;
a.initial();
cin.get();
cin.get();
}
  josephus.h
class Josephus
{
public:
Josephus(int num=10,int interval=1)
{
Josephus::num=num;
Josephus::interval=interval;
}
void initial();
protected:
int num;
int interval;
};
  josephus.cpp
#include <iostream>
#include "josephus.h"
#include "ring.h"
using namespace std;
void Josephus::initial()
{
int num,interval;
cout<<"请输入孩子总数:";
cin>>num;
if(num<2)
{
cout<<"孩子总数不能小于2,否则不能构成环链!";
return;
}
cout<<"请输入抽选号码";
cin>>interval;
if(interval<1|interval>num)
{
cout<<"请输入抽选号码不能小于1或者大于小孩总数!";
return;
}
Josephus::num=num;
Josephus::interval=interval;
Ring a(num);
a.ShowRing(num);
cout<<endl;
for(int i=1;i<num;i++)
{
a.CountInterval(interval);
a.ShowWiner_loser();
a.OutChild();
}
cout<<endl<<"胜利者是:";
a.ShowWiner_loser();
}

ring.h

struct Children
{
int number;
Children *next;
};
class Ring
{
public:
Ring(int num)
{
josephus = new Children[num];
point = josephus;
for(int i=1;i<=num;i++)
{
point->number = i;
point->next = josephus + i % num;
point=point->next;
}
point = &josephus[num-1];
}
~Ring()
{
delete[] josephus;
}
void ShowRing(int num);
void CountInterval(int interval);
void OutChild();
void ShowWiner_loser();
protected:
Children *josephus;
Children *point;
Children *cut_point;
};

ring.cpp

#include <iostream>
#include "ring.h"
using namespace std;
void Ring::ShowRing(int num)
{
point=josephus;//也可以写成point=point->next;但前着效率高一点点
for(int i=1;i<=num;i++)
{
cout<<point->number<<",";
point=point->next;
}
point=&josephus[num-1];//输出过后恢复point应该在的位置
}
void Ring::CountInterval(int interval)//数小孩
{
for(int i=0;i<interval;i++)
{
cut_point = point;
point = cut_point->next;
}
}
void Ring::OutChild()
{
cut_point->next = point->next;//将不要节点断离
point=cut_point;
}
void Ring::ShowWiner_loser()
{
cout<<point->number<<",";
}

程序中需要注意的小地方是在这里

class Josephus
{
public:
Josephus(int num=10,int interval=1)
{

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号