0

我在 C++ 中无效的环境函数中创建了一个向量调用 nucleus 和 cell。然后我调用创建病毒点向量的病毒函数。然后我想在病毒调用的另一个函数中访问向量核和细胞。是否可以不通过病毒函数调用病毒?如果不是,最好的方法是什么?附上我的代码。先谢谢了。另外我没有在函数中添加所有代码......

    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结合两者的结构:

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) {...}

在您的 main 中,您将环境结构传递给需要对其进行操作的函数:

int main()
{
    Environment env;

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

在过程编程范式中,数据与对该数据进行操作的过程是分开的。数据在辅助函数链中作为参数不断传递是正常的。抵制将数据存储在全局变量中并让函数直接访问这些全局变量的诱惑。全局变量导致代码更难测试、更难阅读和更难重用。

您应该在程序执行的操作之后命名您的程序。名称中应该有某种动作动词,例如prepare_environment。如果该过程对某种数据进行操作,那么该数据的名称将成为该动词的宾语,例如prepare_environment

相反,您应该以它们建模的实体来命名您的结构。名字中应该有名词,例如environment

一旦你理解了过程式编程的原则,我想你会发现更容易理解面向对象的编程。

于 2012-08-02T18:35:04.430 回答