从其他类中的类引用数组

Reference array from class in an other class

本文关键字:引用 数组 其他      更新时间:2023-10-16

我正在编写一个将十进制数转换为二进制、八进制和十六进制的程序。我在不同的类中进行每次转换,但我想使用存储在第一类内部数组 (bin[31]) 中的数字的二进制形式。有没有办法在我的其他类中使用该数组?我的老师说我应该使用参考文献,但我不知道该怎么做。我的文件是:

二进制.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()
{
}

八进制

#ifndef OCTAL_H
#define OCTAL_H

class Octal{
private:
    int* oct_ = new int[10];
            int i;
public:
    Octal();
        void ConvertToOctal();
        void PrintOctal();
    ~Octal();
};
#endif

八进制.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()
{
}

如果你必须使用自己的类

可以在 Binary 类中添加一个方法,以便访问指向包含数据的数组的指针。该方法可能如下所示:

int getData(){
  return bin;
}

您也可以使用 Binary::bin 直接访问数组,这也将为您提供指向数组第一个元素的指针。

如果将数组类型从 int to boolchar 更改为 .如果你想做得更好 - 使用 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操纵器内部的底座。