1

10 進数を 2 進数、8 進数、16 進数に変換するプログラムを作成しています。私は異なるクラスで各変換を行っていますが、最初のクラス内の配列 (bin[31]) に格納されている数値のバイナリ形式を使用したいと考えています。その配列を他のクラスで使用する方法はありますか? 先生は参考文献を使うべきだと言いましたが、その方法がわかりません。私のファイルは次のとおりです。

Binary.h

#ifndef BINARY_H
#define BINARY_H




class Binary{

public:

    int num_;                               
    static int bin[31];
    int i;
    int x;


    Binary();

        void Set(int temp);                
        int Get();
        void ChangeToBinary();              
        void ChangeToBinaryComplement();    
        void TwoComplement();               
        void PrintBinary();                 

    ~Binary();                              



};
# endif

バイナリ.cpp

#include <stdio.h>
#include <iostream>
#include "Binary.h"
#include "Octal.h"

using namespace std;

Binary::Binary(){

}

    void Binary::Set(int temp){                     
        num_ = temp;
}

    int Binary::Get(){                              
        return num_;
}

    void Binary::ChangeToBinary(){                  

        x = 1;                                      
        for (i=0;i<30;i++){                         
            x*=2;                                   
}

        for (i = 0; i<31;i++){
            if (num_ -x >= 0){                      
                bin[i] = 1;                     
                num_ = num_ -x;                 
}
        else{
            kettes[i] = 0;                          

}           x=x/2;                                      
}
}

    void Binary::ChangeToBinaryComplement(){        

        for (i=0;i<31;i++){                         
            if (bin[i] ==0){
                bin[i] = 1;
}
            else {
                bin[i] = 0;
}
}
}

    void Binary::TwoComplement(){                   
        for(i=30;i>0;i--){                          
            if(bin[i] == 0){                        
                bin[i] = 1;                     
                break;                              
}               else{                                   
                bin[i] = 0;                     
}                                                       
}
}

    void Binary::PrintBinary(){                     
        for (i=0;i<31;i++){                         
            cout << bin[i];
}
        cout << " " << endl;

}

Binary::~Binary()
{

}

Octal.h

#ifndef OCTAL_H
#define OCTAL_H


class Octal{

private:
    int* oct_ = new int[10];
            int i;
public:

    Octal();
        void ConvertToOctal();
        void PrintOctal();

    ~Octal();
};

#endif

Octal.cpp

#include <stdio.h>
#include <iostream>
#include "Binary.h"
#include "Octal.h"

using namespace std;

Octal::Octal()
{

}
    void Octal::ConvertToOctal(){
        int k = 0;
        int z = 0;
        int o = 0;
        for(i=0;i<31;i++){
            if((help[i] ==1) && (k==0)){
                z = z + 4;
                k = k + 1;

}
            else if((help[i] ==1) && (k==1)){
                z = z + 2;
                k = k + 1;

}
            else if((help[i] ==1) && (k==2)){
                z = z + 1;
                k = k + 1;

}
            else{
                k = k + 1;

}
            if(k==3){
                oct_[o]=z;
                z=0;
                k=0;
                o = o + 1;
}
}

}
    void Octal::PrintOctal(){
        for(i=0;i<10;i++){
            cout << oct_[i];

}
}
Octal::~Octal()
{

}
4

1 に答える 1

0

独自のクラスを使用する必要がある場合

Binaryデータを含む配列へのポインターにアクセスできるようにするメソッドをクラス内に追加できます。メソッドはおそらく次のようになります。

int getData(){
  return bin;
}

を使用して配列に直接アクセスすることもできますBinary::bin。これにより、配列の最初の要素へのポインターも得られます。

int配列タイプをからboolまたはに変更した方がはるかに良いでしょうchar。さらにうまくやりたい場合は、vector< bool >テンプレートクラスを使用してください。基本的にブール値の配列です。C++ リファレンスでそれについて読むことができます

機能性だけが必要な場合

本当に標準を使用する必要がありますmanipulators。車輪を再発明する本当の理由はありません。これを行う最も簡単な方法は、数値をストリームに入力し、それを文字列に出力することです。このような:

#include<string>     // string
#include<sstream>    // stringstream
#include<iostream>   // cin, cout
#include<iomanip>    // setbase

using namespace std;

int main(){
  int number;
  cin >> number;

  stringstream parser;
  parser << setbase(16) << number;

  string convertedNumber;
  parser >> convertedNumber;

  cout << endl << convertedNumber << endl;

  return 0;
}

もちろんsetbaseマニピュレーター内部のベースを変更することもできます。

于 2013-11-08T03:19:09.853 に答える