C ++从结构更改为类 [英] C++ change from struct to classes

查看:90
本文介绍了C ++从结构更改为类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望将其从结构更改为类,并使用头文件保存该类。

I am looking to change this from struct to classes and use a header file to hold the class.

您会提出什么建议来进行更改。该代码全部有效。那里没有问题。只是对问题的简单更改。

What would you suggest in way of changing it over. The code all works. There is no problem there. just a simple change over question.

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
struct printype
{
    char dots[8][15];
    int unknown15;          //  can have values of 0..127
    string serial11_14;     //  8 characters 00000000...99999999
    int year8;              //  without century, 0..99
    int month7;             //  1..12
    int day6;               //  1..31
    int hour5;              //  0..23
    int minute2;            //  0..59
};                              
int getunknown15(); // prototypes       
string getserial11_14();    
int getyear8();                 
int getmonth7();            
int getday6();              
int gethour5();                 
int getminute2();   
int setunknown15(int);          //------------------------- protos
string setserial11_14(string);  
int setyear8(int);              
int setmonth7(int);             
int setday6(int);               
int sethour5(int);              
int setminute2(int);            
// int array and display info for array
void setup(char[8][15]);
// display array
void darray(char[8][15]);
//  displays printer information
void dpinfo(printype);
// set parrity
void spar(char[8][15]); 
// fill array
void ftarray(printype &);       //----------------------end protos
//-------------------------------------


void main ()
{
    printype pt;
    pt.unknown15=getunknown15();
    pt.unknown15=setunknown15(pt.unknown15);
    pt.serial11_14=getserial11_14();
    pt.serial11_14=setserial11_14(pt.serial11_14);
    pt.year8=getyear8();
    pt.year8=setyear8(pt.year8);
    pt.month7=getmonth7();
    pt.month7=setmonth7(pt.month7);
    pt.day6=getday6();
    pt.day6=setday6(pt.day6);
    pt.hour5=gethour5();
    pt.hour5=sethour5(pt.hour5);
    pt.minute2=getminute2();
    pt.minute2=setminute2(pt.minute2);
    cout <<"-----------------------------------------------------"<<endl;
    cout <<" Lets Get Started"<<endl;
    cout <<"-----------------------------------------------------"<<endl;
    setup(pt.dots);             // sets up the array 
    dpinfo(pt);                 // prints out the final array
    ftarray(pt);
    spar(pt.dots);
    darray(pt.dots);
}


int getunknown15()
{
    printype tem;
    cout <<"-----------------------------------------------------"<<endl;
    cout <<" Enter the Unkown Variable (0-127):  ";
    cin  >>tem.unknown15;
    cout <<"-----------------------------------------------------"<<endl;
    return tem.unknown15;
}
string getserial11_14()//------------------------------------------ starts the get information sets
{
    printype tem;
    cout <<" Enter the Serial Variable (8char long):  ";
    cin  >>tem.serial11_14;
    cout <<"-----------------------------------------------------"<<endl;
    return tem.serial11_14;
}
int getyear8()
{
    printype tem;
    cout <<" Enter the Year Variable (2char long):  ";
    cin  >>tem.year8;
    cout <<"-----------------------------------------------------"<<endl;
    return tem.year8;
}
int getmonth7()
{
    printype tem;
    cout <<" Enter the Month Variable (2char long):  ";
    cin  >>tem.month7;
    cout <<"-----------------------------------------------------"<<endl;
    return tem.month7;
}
int getday6()
{
    printype tem;
    cout <<" Enter the Day Variable (2char long):  ";
    cin  >>tem.day6;
    cout <<"-----------------------------------------------------"<<endl;
    return tem.day6;
}
int gethour5()
{
    printype tem;
    cout <<" Enter the Hour Variable (2char long):  ";
    cin  >>tem.hour5;
    cout <<"-----------------------------------------------------"<<endl;
    return tem.hour5;
}
int getminute2()
{
    printype tem;
    cout <<" Enter the Minute Variable (2char long):  ";
    cin  >>tem.minute2;
    cout <<"-----------------------------------------------------"<<endl;
    return tem.minute2;
}
//-----------------------------------------------------------put functions (adds info to the array)

int setunknown15(int tem)
{
    printype pp;


    if (tem>127||tem<0)
    {
        cout << "Error" << endl;
        return 0;
    }
    else
    {
        pp.unknown15 = tem;
        return pp.unknown15;
    }
}
string setserial11_14(string tem)
{
    printype pp;
    if(tem.size() !=8)
    {
        cout <<"nope.jpg"<<endl;
        return 0;
    }
    else
    {
        for (int i = 0; i < 8; i++)
        {
            if(!isdigit(tem.at(i)))
            {
                cout<<"nope.jpg"<<endl;
                return 0;
            }
        }
        pp.serial11_14=tem;
        return pp.serial11_14;
    }
}
int setyear8(int tem)
{
    printype pp;
    if(tem>99||tem<0)
    {
        cout<<"nope.jpg"<<endl;
        return 0;
    }
    else
    {
        pp.year8=tem;
        return pp.year8;
    }
}
int setmonth7(int tem)
{
    printype pp;
    if(tem>12||tem<1)
    {
        cout<<"nope.jpg"<<endl;
        return 0;
    }
    else
    {
        pp.month7=tem;
        return pp.month7;
    }
}
int setday6(int tem)
{
    printype pp;
    if(tem>31||tem<1)
    {
        cout<<"nope.jpg"<<endl;
        return 0;
    }
    else
    {
        pp.day6=tem;
        return pp.day6;
    }
}int sethour5(int tem)
{
    printype pp;
    if(tem>23||tem<0)
    {
        cout<<"nope.jpg"<<endl;
        return 0;
    }
    else
    {
        pp.hour5=tem;
        return pp.hour5;
    }
}
int setminute2(int tem)
{
    printype pp;
    if(tem>59||tem<0)
    {
        cout<<"nope.jpg"<<endl;
        return 0;
    }
    else
    {
        pp.minute2=tem;
        return pp.minute2;
    }
}
void setup(char tem[8][15])
{
    for (int x=0;x<8;x++)// set to all blanks
    {
        for (int y=0;y<15;y++)
        {
            tem[x][y]=' ';
        }
    }
}
void darray(char tem[8][15])
{
    for (int x=0;x<8;x++)// set to all blanks
    {
        cout <<"\t-------------------------------"<<endl;
        cout <<"\t|";
        for (int y=0;y<15;y++)
        {

            cout << tem[x][y];
            cout<<"|";
        }
        cout <<"\n";
    }
    cout <<"\t-------------------------------"<<endl;
}
void dpinfo(printype mc)
{
    cout <<"The unknown is:\t"<<mc.unknown15<<"\nThe String is:\t"<<mc.serial11_14<<"\n Time:\n\n Year: 20"<<mc.year8<<" month: "<<mc.month7<<"\n day: "<<mc.day6<<" hour: "<<mc.hour5<<"\n minute: "<<mc.minute2<<endl;
}
void spar(char tem[8][15])
{
    int count=0;
    for (int x=0;x<7;x++)
    {
        for (int y=0;y<15;y++)
        {
            if(tem[x][y]=='*')
            {
                count+=1;
            }
        }
        if(count%2==0)
        {
            tem[x][0]='*';
        }
    }
    count=0;
    for (int a=0;a<7;a++)
    {
        for (int z=0;z<7;z++)
        {

        }
    }
}
void ftarray(printype &pt)
{
    int tem=0;
    for (int x=1;x<15;x++)
    {
        switch(x)
        {
            case 1:
            {
                tem=pt.minute2;
                break;
            }
            case 4:
            {
                tem=pt.hour5;
                break;
            }
            case 5:
            {
                tem=pt.day6;
                break;
            }
            case 6:
            {
                tem=pt.month7;
                break;
            }
            case 7:
            {
                tem=pt.year8;
                break;
            }
            case 9:
            {
                for (int j = 1; j < 8; j++)
                    {
                        pt.dots[j][x] = '*';
                    }
            }
            case 10:
            {
                tem=atoi(pt.serial11_14.substr(6,2).c_str());
                break;
            }
            case 11:
            {
                tem=atoi(pt.serial11_14.substr(4,2).c_str());
                break;
            }
            case 12:
            {
                tem=atoi(pt.serial11_14.substr(2,2).c_str());
                break;
            }
            case 13:
            {
                tem=atoi(pt.serial11_14.substr(0,2).c_str());
                break;
            }
            case 14:
            {
                tem=pt.unknown15;
                break;
            }
        }
        if(x==1||x==4||x==5||x==6||x==7||x==10||x==11||x==12||x==13||x==14)
        {
            if (tem>=64)
            {
                pt.dots[1][x]='*';
                tem-=64;
            }
            if (tem>=32)
            {
                pt.dots[2][x]='*';
                tem-=32;
            }
            if (tem>=16)
            {
                pt.dots[3][x]='*';
                tem-=16;
            }
            if (tem>=8)
            {
                pt.dots[4][x]='*';
                tem-=8;
            }
            if (tem>=4)
            {
                pt.dots[5][x]='*';
                tem-=4;
            }
            if (tem>=2)
            {
                pt.dots[6][x]='*';
                tem-=2;
            }
            if (tem>=1)
            {
                pt.dots[7][x]='*';
                tem-=1;

            }
        }
    }
}


推荐答案

在C ++中, struct class 是同一回事,除了默认访问级别。您所需要做的就是替换

In C++, struct and class is the same thing, other than the default access level. All you need to do is replace

struct printype
{
//...
};

class printype
{
public:
//...
};

您也可以替换将 printype 用作

void dpinfo(printype);

成为

class printype
{
public:
//....
    void dpinfo();
};

,并且将对 this 而不是参数进行操作。

and will operate on this rather than the parameter.

返回对象 printype 的方法可以成为构造函数。

Methods that return an object printype can become constructors.

int getunknown15()
{
    printype tem;
    cout <<"-----------------------------------------------------"<<endl;
    cout <<" Enter the Unkown Variable (0-127):  ";
    cin  >>tem.unknown15;
    cout <<"-----------------------------------------------------"<<endl;
    return tem.unknown15;
}

在这里,例如,您不需要 tem 变量...什么都不做。您可以直接读取 int 返回值,该返回值表示 tem 仍会在函数退出时被销毁。

Here, for example, you don't need the tem variable... it does nothing. You can directly read an int an return that, tem will be destroyed on function exit anyway.

也许您正在寻找成员函数,例如:

Maybe you're looking for a member function, for example:

int printype::setyear8(int tem)
{
    if(tem>99||tem<0)
    {
        cout<<"nope.jpg"<<endl;
        return 0;
    }
    else
    {
        this->year8=tem;
        return this->year8;
    }
}

通过这种方式可以修改对象,并且您不会丢失任何更改。但是,您的编码风格对 oop 几乎没有了解。我建议您在继续之前先读一本好书,因为我怀疑答案对您来说是否有意义。

This way the object is modified and you don't lose changes. However, your coding style suggests little to no knowledge of oop. I suggest reading a good book before continuing, as I doubt that, as it is, the answer will make much sense to you.

这篇关于C ++从结构更改为类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆