美文网首页
C++面向对象程序设计

C++面向对象程序设计

作者: 帅碧 | 来源:发表于2016-11-14 20:46 被阅读0次

    抽象与分类

    什么是抽象?

    • 抽象是具体事物的描述的一个概括。

    面向对象编程设计的优点?

    • 易维护,质量高,效率高,易扩展

    面向对象程序设计基于两个原则:

    抽象

    • 抽象是具体事物的描述的一个概括。

    分类

    • 层层分类,使概念逐渐细化,即具体化。

    抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。

    1. 先注意问题的本质及描述,其次是实现过程或细节。
    2. 数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)
    3. 代码抽象:描述某类对象的共有的行为特征或具有的功能。
      抽象的实现:通过类的声明。

    什么是分类

    1. 层层分类,使概念逐渐细化,即具体化。相反,归类的结果,便是逐步抽象的过程。
    2. 在面向对象的程序设计中,对象被分成类。类又是层层分解的,这些类与子类的关系可以被规格化地描述。
    3. 描述了类,再描述其子类,就可以只描述其增加的部分。
    4. 所有子类层次上的编程,都只需在已有的类的基础上进行。

    设计与效率

    面向对象程序设计比结构化程序

    1. 对于大部分问题来说能够产生出更加有效的程序
    1. 可读性更好
    1. 可维护性好

    结构化方法分析

    Josephus 问题

    1. 初始化小孩数,开始位置,数小孩数;
    2. 初始化环链表(采用链表数据结构来解);
    3. 数小孩;
    4. 处理未获胜的小孩。分解之后,主程序描述变得短小了:

    Josephus问题解答

    1. 建立结构
    2. 初始化小孩数,开始位置,数小孩个数
    3. 初始化环链表(采用链表数据结构来解)
    4. 转到开始位置(一个循环)
    5. 处理未获胜的小孩
    6. 输出得胜者
    7. 返还结构数组空间
    #include <iostream>
    #include<stdlib.h>
    using namespace std;
    typedef struct Node
    {
        int data;
        struct Node *next;
    }Node,*List;
    class Ring//环链表
    {
    private:
        List First;
        int Count;
        int Current;
        //List Begin;
    public:
        void Print();
        void Clear(){};
        void Creatlist(int n,int m,int z);
        void Pivot();
    };
    void Ring::Creatlist(int n,int m,int z)
    {
        List p;
        int i;
        First=(Node*)malloc(sizeof(Node));
        if(!First)
        {
            cout<<"memory allocation error!\n";
            return ;
        }
        First->data=1; First->next=First;
        for(i=n;i>1;--i)
        {
            p=(Node*)malloc(sizeof(Node));
            if(!p)
            {
                cout<<"memory allocation error!\n";
                return;
            }
            p->data=i; p->next=First->next; First->next=p;
        }
        Count = n;
        Current = m;
        if(z<1)return;
        for(int j = 0;j<z;j++)
        {
            First=First->next;
        }
    }
    void Ring::Print()
    {
        List p=First;
        do
        {
            cout<<p->data<<" ";
            p=p->next;
        }while(p!=First);
        cout<<endl;
    }
    void Ring::Pivot()
    {
        Node* p=First,*pre=NULL;
        int i,j;
        for(i=0;i<Count-1;++i)
        {
            for(j=1;j<Current;++j)
            {
                pre=p;
                p=p->next;
            }
            cout<<"出列的人是"<<p->data<<endl;
            pre->next=p->next; free(p);
            p=pre->next;
        }
        cout<<"The winner is "<<p->data<<endl;
    }
    class Josephus
    {
    private:
        int Boynumber;//孩子数量
        int Beginpos;//开始位置
        int Inteval;//间隔
        Ring Head;
    public:
        void Inital();//初始化
        void Getwinner();//获得胜利者
        void Output();
    };
    void Josephus::Inital()
    {
        cout<<"Input the Boynumber , Inteval and Beginpos:";
        cin>>Boynumber>>Inteval>>Beginpos;
        if(Inteval < 2)Inteval = 2;
        Head.Creatlist(Boynumber,Inteval,Beginpos);
    }
    void Josephus::Getwinner()
    {
        Head.Pivot();
    }
    void Josephus::Output()
    {
        Head.Print();
    }
    int main()
    {
    Josephus jose;
    jose.Inital();
    jose.Output();
    jose.Getwinner();
    return 0;
    }
    
    
    

    相关文章

      网友评论

          本文标题:C++面向对象程序设计

          本文链接:https://www.haomeiwen.com/subject/xtckpttx.html