c++从结构体到类的变化

C++ change from struct to classes

本文关键字:变化 结构体 c++      更新时间:2023-10-16

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

你有什么修改的建议吗?代码都可以工作。没有问题。只是一个简单的问题改变。

#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:nn 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++中,structclass是一样的,除了默认的访问级别。你所需要做的就是替换

struct printype
{
//...
};

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

你也可以用成员函数代替以printype作为参数值的函数:

void dpinfo(printype);

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

和将操作this而不是参数。

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

我怀疑你的代码有几个问题:

int getunknown15()
{
    printype tem;
    cout <<"-----------------------------------------------------"<<endl;
    cout <<" Enter the Unkown Variable (0-127):  ";
    cin  >>tem.unknown15;
    cout <<"-----------------------------------------------------"<<endl;
    return tem.unknown15;
}
例如,在这里,您不需要tem变量…它什么也不做。你可以直接读取int并返回它,无论如何tem都会在函数退出时被销毁。

也许你正在寻找一个成员函数,例如:

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

通过这种方式修改对象,而不会丢失更改。但是,您的编码风格表明您几乎不了解oop。我建议在继续之前读一本好书,因为我怀疑答案对你来说有多大意义。

首先,c++中的结构体和类是一样的,唯一的区别是结构体是默认的public,而类是默认的private。您只需将struct更改为class

查看您的代码,然而,我假设您正在从C转换到c++,并希望将函数作为方法添加到类中。为此,只需将原型添加到类声明中,然后将类空间添加到函数实现中。您还应该在必要

中添加任何相关的构造函数和析构函数。

在h文件

class Printype {
    char **dots;
    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
    //Constructors
    Printype();                                        //Default
    Printype(const Printype &cpy);                     //Copy
    Printype(int yr, int mo, int d, int hr, int min);  //Sample initializer
    //Destrutor
    ~Printype();
    //Methods (only gonna do 2 for example)
    int getYear();
    void setYear(int y);
};

在cpp或cc文件中

#include "printype.h"
Printype::Printype() {
    dots = new char*[8];
    for(int i=0;i<8;++i) {
        dots[i] = new char[15];
    }
    unknown15 = 0; serial11_14 = ""; year8 = 0;
    month7 = 0; day6 = 0; hour5 = 0;minute2 = 0;
}
Printype::Printype(const Printype &cpy) {
    //Deep copy all values from cpy to this
}
Printype::Printype() {
    dots = new char*[8];
    for(int i=0;i<8;++i) {
        dots[i] = new char[15];
    }
    unknown15 = 0; serial11_14 = ""; year8 = yr;
    month7 = mo; day6 = d; hour5 = hr;minute2 = min;
}
//Destructor (free allocated memory)
Printype::~Printype() {
    for(int i=0;i<8;++i) {
        delete[] dots[i]; dots[i] = NULL;
    }
    delete[] dots; dots = NULL;
}
//Methods
int Printype::getYear() {
   return year8;
}
void Printype::setYear(int y) {
    year8 = y;
} 

还应该实现一个=操作符。希望这能让你开始并回答你的问题。除了c++语法、模式等之外,你还应该认真阅读一些通用的OOP知识。其中很多内容看起来很陌生,没有多大意义,在这个论坛上解释需要很长时间。网上有很多关于这些材料的资源,所以你应该试着仔细阅读。