0

c++では無効な環境関数でニュークリアスとセルを呼び出すベクトルを作成しました。次に、ウイルスポイントのベクトルを作成するウイルス関数を呼び出します。次に、ウイルスによって呼び出される別の関数でベクターの核と細胞にアクセスしたいと思います。ウイルス機能を経由せずにウイルスを呼び出すことはできますか?そうでない場合、それを行うための最良の方法は何ですか?添付されているのは私のコードです。よろしくお願いします。また、関数内にすべてのコードを追加しませんでした...

    struct point {
        float x;
        float y;
    };
    struct space{
        point point1;
        point point2;
        point point3;
        point point4;
    };

        int gelato(vector<point> & virus,int& times,int& iv, ofstream& data_file)
    {
        int a;
        int b;

        bool nc,cc,cmc;
        for(int i =0; i<virus.size(); i++)
        {
             a = virus[i].x;
             b = virus[i].y;

            nc = nucleus_check(nucleus,a,b); // **Need to call vector cell and nucleus**
            cc = cytoplasm_check(cell,a,b);
            cmc = cell_membrane_check(cell,a,b);
        }
    }

int moves(char n)
{
    int moved;
    int trial;

    if( n =='A')
    {
        moved = rand()%4;
    }
    else if(n=='B')
    {
        moved= rand()%3+1;
    }
    else if(n=='C')
    {
        trial= rand()%4;
        if(trial ==1)
        {
            moves('C');
        }
        else
        {
            moved = trial;
        }
    }
    else if(n =='D')
    {
        trial = rand()%4;
        if(trial == 2)
        {
            moves('D');
        }
        else
        {
            moved = trial;
        }
    }
    else if(n=='E')
    {
        moved = rand()%3;
    }

    return moved;
}   
int v_move(vector<point>& virus, int& iv, ofstream& data_file)
{

        gelato(virus,times,iv,data_file);
}
int rand_in(char a)
{}
void virus( ofstream& data_file)
{

    v_move(virus, iv, data_file);
}
void cell_space(int r)
{

    vector<point>cell;
}
void nucleus_space(int r)
{

    vector<point>nucleus;
}   

void environment() //**Where the vector nucleus and cell are created**
{
    //cell
    cell_space(16)

    //nucleus
    nucleus_space(4);
    //cout<<"Environment"<<endl;
}
int main()
{
    srand(time(NULL));
    data_file.open("data.csv");
    environment();
    virus(data_file);

    return 0;
}
4

1 に答える 1

0

オブジェクト指向プログラミング(OOP)をまだ習得/習得しておらず、手続き型プログラミングパラダイムを使用してプログラムを実装したいとします。C ++はいくつかのパラダイムをサポートし、OOPの使用を強制しないため、これは問題ありません。

「細胞空間」と「核空間」は、「環境」と呼ばれる実体として一緒に使用されることを意図しているため、次environmentの2つを組み合わせた構造を定義する必要があります。

struct environment
{
    vector<point> cells;
    vector<point> nuclei;
};

環境を準備する関数は次のようになります。

void prepare_environment(environment& env, // environment passed by reference
                         int cellCount, int nucleusCount)
{
    prepare_cells(env.cells, cellCount);
    prepare_nuclei(env.nuclei, nucleusCount);
};

void prepare_cells(std::vector<point>& cells, // cell vector passed by reference
                   int cellCount)
{
    cells.resize(cellCount);
    // Do other stuff to initialize cells
}

void prepare_nuclei(std::vector<point>& nuclei, int cellCount) {...}

メインでは、環境構造を操作する必要のある関数に渡します。

int main()
{
    Environment env;

    prepare_environment(env, 16, 4);
    move_virusus(env);
}

手続き型プログラミングのパラダイムでは、データはそのデータを操作する手続きとは別に保持されます。データがヘルパー関数のチェーンの引数として継続的に渡されるのは正常です。データをグローバル変数に格納し、関数がそれらのグローバル変数に直接アクセスするという誘惑に抵抗してください。グローバル変数を使用すると、コードのテスト、読み取り、再利用が困難になります。

実行するアクションにちなんでプロシージャに名前を付ける必要があります。名前には、ある種のアクション動詞が含まれている必要がありますprepare_environment。プロシージャがある種のデータを操作する場合、そのデータの名前がその動詞のオブジェクトになります。prepare_environment

逆に、モデル化するエンティティにちなんで構造に名前を付ける必要があります。名前には名詞が含まれている必要があります。例:environment

手続き型プログラミングの信条を理解すれば、オブジェクト指向プログラミングを理解しやすくなると思います。

于 2012-08-02T18:35:04.430 に答える