一个实例了解诸多语法特性:

由一个简单的十进制转二进制的小实例开始。

可以写成递归的顺序c++模板类,比较一下迭代与递归的对应关系。

可以同时实现控制台输出与文件输出。

可以使用标准库提供的栈。

也可以使用结构体+全局函数自定义一个顺序栈结构体及操作。

也可以使用类自(数据成员+成员函数)定义一个顺序栈类。

也可以将顺序栈类升级为模板类。

这些可以大致了解C++的抽象过程(当然未包括其精髓所在:继承与多态c++模板类,需要更深入,这里只是入门一下C++的语法)。

细节见代码注释:

#include 
#include 
using namespace std;
void d2bSeqenceStack(int n)// decimal to binary
{
    int data[64] = {0};
    int top = 0;
    do
        data[top++] = n%2;
    while(n/=2);
    for(int i=top-1;i>=0;i--)
        printf("%d",data[i]);
}
void d2bIncursion(int n)
{
    if(n>0)
    {
        d2bIncursion(n/2);
        FILE *fp;
        fp = fopen("C:\test.txt","a+");
        if(!fp)
        {
            printf("打开文件出了问题!");
            exit(-1);
        }
        fputc(n%2+'0',fp);
        printf("%d",n%2);
        fclose(fp);
    }
}
void d2bOutput2File()
{
    for(int i=0;i=MAXSIZE;
}
bool isFull(Mss& mss){
    return mss.idx>=MAXSIZE;
}
bool push(Mss& mss,int val){
    if(!isFull(mss))
    {
        mss.data[mss.idx++] = val;
        return true;
    }
    else
        return false;
}
bool CMss::push(int val){
    if(!isFull())
    {
        data[idx++] = val;
        return true;
    }
    else
        return false;
}
bool empty(Mss& mss){
    return mss.idx<=0;
}
bool CMss::empty(){
    return idx<=0;
}
bool pop(Mss& mss)
{
    if(empty(mss))
    {
        return false;
    }
    else{
        mss.idx--;
        return true;
    }
}
bool CMss::pop()
{
    if(empty())
    {
        return false;
    }
    else{
        idx--;
        return true;
    }
}
int top(Mss& mss){
    return mss.data[mss.idx];
}
int CMss::top(){
    return data[idx];
}
void d2bByLibStack(int n)
{
    stack st;      // 标准库中的stack
    do
         st.push(n%2);
    while(n/=2);
    while(!st.empty())
    {
        printf("%d",st.top());
        st.pop();
    }
}
void d2bByMyStack(int n)
{
    Mss st;         // 自定义C的MyStack
    do
         push(st,n%2);
    while((n/=2) && (!isFull(st)));
    while(!empty(st))
    {
        
        pop(st);
        printf("%d",top(st));
    }
}
void d2bByMyStackClass(int n)
{
    CMss st;        // 自定义C++的MyStack(固定大小)
    do
         st.push(n%2);
    while((n/=2) && (!st.isFull()));
    while(!st.empty())
    {
        st.pop();
        printf("%d",st.top());
    }
}
class CMssD           // 定义一个能动态增长空间的stack类
{
    int *data;
    int idx;
    int capacity;
public:
    CMssD(){
        data = new int[MAXSIZE];
        capacity = MAXSIZE;
        idx = 0;
    }
    bool push(int val);
    bool empty();
    bool pop();
    int top();
};
bool CMssD::push(int val){
    if(capacity > idx)
    {
        data[idx++] = val;
        return true;
    }
    else
    {
        int* tmpp = new int[capacity + MAXSIZE];
        
        if(data != NULL)
        {
            for(int i=0;i<idx;i++)
                tmpp[i] = data[i];
            data = tmpp;
            data[idx++] = val;
        }
        else
            return false;
    }    
}
bool CMssD::empty(){
    return idx<=0;
}
bool CMssD::pop()
{
    if(empty())
    {
        return false;
    }
    else{
        idx--;
        return true;
    }
}
int CMssD::top(){
    return data[idx];
}
void d2bByMyStackClassD(int n)
{
    CMssD st;               // 自定义C++的MyStack(动态大小)
    do
         st.push(n%2);
    while(n/=2);
    while(!st.empty())
    {
        st.pop();
        printf("%d",st.top());
    }
}
template 
class CMssDT       
{
    T *data;
    int idx;
    int capacity;
public:
    CMssDT(){
        data = new T[MAXSIZE];
        capacity = MAXSIZE;
        idx = 0;
    }
    bool push(T val);
    bool empty();
    bool pop();
    int top();
};
template           // 看一下类模板的简单写法,只要修修改改即可
bool CMssDT::push(T val){
    if(capacity > idx)
    {
        data[idx++] = val;
        return true;
    }
    else
    {
        int* tmpp = new T[capacity + MAXSIZE];
        
        if(data != NULL)
        {
            for(int i=0;i<idx;i++)
                tmpp[i] = data[i];
            data = tmpp;
            data[idx++] = val;
        }
        else
            return false;
    }    
}
template 
bool CMssDT::empty(){
    return idx<=0;
}
template 
bool CMssDT::pop()
{
    if(empty())
    {
        return false;
    }
    else{
        idx--;
        return true;
    }
}
template 
int CMssDT::top(){
    return data[idx];
}
void d2bByMyStackClassDT(int n)
{
    CMssDT st;               // 自定义C++的MyStack模板类(动态大小)
    do
         st.push(n%2);
    while(n/=2);
    while(!st.empty())
    {
        st.pop();
        printf("%d",st.top());
    }
}
int main()
{
    d2bOutput2File();
    int i = 1;
    for(i=10;i<21;i++)
    {
        printf("%dt",i);
        d2bByMyStackClassDT(i);
        printf("n");
    }
restart:
    goto restart;
    return 0;
}
/*
*/

运行效果:

输出到文件中的内容:

-End-

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688