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

很多书在一开始就开始学习josephus问题,为了让大家前面学起来较为容易我把前面涉及到此问题的地方都故意去掉了,现在我们已经学习过了结构体和类,所以放在这里学习可能更合适一些。

在正式开始学习之前我们先回顾一下如何利用数组和结构体的方式来解决,最后我们再看一下如何利用面向对象的抽象理念进行解决此问题的程序设计,相互对比,找出效率最高,最容易理解,最方便维护的程序来,说明利用面向对象的抽象理念进行程序设计的好处。

josephus问题其实就是一个游戏,一群小孩围成一个圈,设置一个数,这个数是个小于小孩总数大于0的一个整数,从第一个小孩开始报数,当其中一个小孩报到你设置的那个数的时候离开那个圈,这样一来反复报下去,直到只剩下最后一个小孩的时候那个小孩就是胜利者,写程序来找出这个小孩。

以下是数组方法:

由于数组的限制我们必须预先假设好有多少个小孩,离开的小孩他自身设置为0来标记离开状态。

代码如下:

#include <iostream>using namespace std;void main(){  const int num=10;  int interval;  int a[num];  for(int i=0; i<num; i++)  {    a[i]=i+1;  }    cout <<"please input the interval: ";  cin >>interval;  for(int i=0; i<num; i++)  {    cout <<a[i] <<",";  }    cout <<endl;int k=1;int p=-1;while(1){    for(int j=0;j<interval;)    {        p=(p+1)%num;        if(a[p]!=0)        {            j++;        }    }    if(k==num)    {        break;    }    cout<<a[p]<<",";    a[p]=0;    k++;}cout <<"\nNo." <<a[p] <<" boy've won.\n";cin.get();cin.get();}

就数组解决来看,程序简短但效率不高可读性也不好,此代码没有什么特别之处主要依靠一个加1取模的方式来回到首位置,形成环链:p=(p+1)%num;。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 面向对象
, 学习
, 程序设计
, 抽象
一个
面向对象 抽象、面向对象的抽象、面向对象 抽象类、java面向对象 抽象、面向对象的理解,以便于您获取更多的相关知识。

时间: 2024-10-06 08:02:01

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

详解Java面向对象编程中方法的使用_java

一个 Java 方法是为了执行某个操作的一些语句的组合.举个例子来说,当你调用 System.out.println 方法时,系统实际上会执行很多语句才能在控制台上输出信息. 现在你将学习怎么创建你自己的方法,他们可以有返回值也可以没有返回值,可以有参数,也可以没有参数,重载方法要使用相同的方法名称,并在程序设计中利用抽象的方法. 创建方法我们用下面的例子来解释方法的语法: public static int funcName(int a, int b) { // body } 在这里 publ

PHP面向对象程序设计之接口用法_php技巧

接口是PHP面向对象程序设计中非常重要的一个概念.本文以实例形式较为详细的讲述了PHP接口的用法.具体如下: 接口:interface 在PHP中,我们可以规定,一个对象应该具有哪些公共的外部操作,即可使用interface来规定. 公共的方法就是接口.用于规定一个对象应该用于哪些公共的操作方法(接口),这个也叫接口(公共操作方法的集合) 即:接口(interface结构,公共方法集合) 公共方法(接口方法) 定义:用于限定某个对象所必须拥有的公共操作方法的一种结构,称之为接口(interfac

PHP面向对象程序设计之类常量用法实例_php技巧

类常量是PHP面向对象程序设计中非常重要的一个概念,牢固掌握类常量有助于进一步提高PHP面向对象程序设计的水平.本文即以实例形式描述了PHP程序设计中类常量的用法.具体如下: 类常量:类中,保存运行周期内,不变的数据. 定义: const 关键字 const 常量名 = 常量值 例子如下: class Student { public $stu_id; public $stu_name; public $stu_gender; const GENDER_MALE= '男'; const GEND

《Objective-C入门经典》——2.1节Objective-C世界中的面向对象程序设计

2.1 Objective-C世界中的面向对象程序设计Objective-C入门经典面向对象程序设计可能是现在最常用的程序设计范式了,但究竟什么是面向对象程序设计却并没有一个清晰的定义.最常见的非正式描述(不是定义)是说它是一种使用对象-方法和变量的组合体,表示程序中的概念或物理对象-作为基本的构建块的程序设计风格.在构建程序时,如果能够将程序组件直接对应到物理世界中的对象和概念,就会使开发软件变得更加容易,这是因为程序员可以在同一抽象层次考虑对象和软件所建模的概念. 除了需要理解基本的对象概念

浅谈Java程序设计中继承的利与弊

摘要:在 Java 中,正确应用继承,能够达到代码重用.增强可靠性.简化程序设计.提高编程效率.并使之易于维护的目的.但是一个程序中过多地使用继承是不可取的,它会带来一些局限性.本文就继承的利与弊进行一个分析. 关键词:继承;超类;子类;代码重用 继承在 Java 面向对象编程中是与生俱来的.所有类,无论是API,还是编程人员自己编写的,都自动继承于 Java 所有类的始祖--Object 类,代表了所有类的共性. 一.继承的概述 继承是面向对象设计的特点之一.和现实世界中的继承概念一样,继承就

JavaScript面向对象程序设计教程_javascript技巧

JavaScript中对象的定义为:无序属性的集合,其属性可以包含基本值.对象或者函数.可以把对象想象成散列表,就是一组名值对(key:value),其中值可以是数据或函数,每个对象都是基于一个引用类型创建的. 理解对象 前面的博客里写过创建对象的方式有两种,一种是创建一个object的实例,另一种是使用对象字面量法: var person = new Object(); person.sex = man; person.name = bluce person.age = 58; person.

JavaScript面向对象程序设计(5) 类

类是面向对象程序设计的核心概念之一.一个类代表了具有相似属性的一类事物的抽象.从本篇开始 ,我们将正式的进入JavaScript的面向对象部分.首先需要注意的是,在JavaScript中并没有"类 "这一关键字--在大多数语言中都是使用class作为关键字的.所以,这里的类就成 了一个概念,它没有明确的语法标志. 1.类和构造函数 前面说过,在JavaScript中并没有明确的类的概念.实际上,我们给出的只是类的构造函数.类的构 造函数构成了这个类的全部内容.既然叫做构造函数,它也是一

JavaScript面向对象程序设计(1) 前言

基于对象还是面向对象? 面向对象技术是现代软件开发中的重要技术之一.面向对象变成的好处毋庸置疑,现在的主流语言如 Java.C++都是面向对象的.现在的面向对象理论更多的是使用Java或C++进行描述,究其根源,在于这 些语言都是传统的面向对象语言,具有面向对象理论所指明的一切特性:类.封装.继承.多态等等. 相比而言,一些动态语言如JavaSript就显得不那么面向对象--至少,在JavaScript中 并没有类class这一关键字.但是,在JavaScript中并不是没有类的概念.于是有人说

javascript面向对象程序设计高级特性经典教程(值得收藏)_javascript技巧

本文实例讲述了javascript面向对象程序设计的高级特性.分享给大家供大家参考,具体如下: 1.创建对象的三种方式: 第一种构造法:new  Object var a = new Object(); a.x = 1, a.y = 2; 第二种构造法:对象直接量 var b = { x : 1, y : 2 }; 第三种构造法:定义类型 function Point(x, y){ this.x = x; this.y = y; } var p = new Point(1,2); 2.访问对象