如何通过引用将对象传递给构造函数

How to pass object by reference to a constructor

本文关键字:构造函数 对象 何通过 引用      更新时间:2023-10-16

我想通过引用将对象传递给构造器,但是我遇到了问题,因为我不知道如何将其绑定到类的变量。

在这里,我发布了我的一些代码,错误出现了。

class ShortestPath{
    public:
        ShortestPath(Graph& graph): graph(graph){};[...]
    private:
        Graph *graph; 
};

在这种情况下,出现的错误是:

cannot convert `Graph' to `Graph*' in initialization 

如果我写

ShortestPath(Graph& graph): *graph(graph){};[...]

错误是

expected identifier before '*' token 

当我调用构造函数时,我应该这样调用吗?最短路径(图表);

您必须按以下方式更改代码:

class ShortestPath{
public:
    ShortestPath(Graph& graph): graph(graph){};[...]
private:
    Graph &graph; 
}

或:

 class ShortestPath{
public:
    ShortestPath(Graph& graph): graph(&graph){};[...]
private:
    Graph *graph; 
}

两种可能的解决方案:

通过引用传递图形并存储指针

// note that (&graph) gets the address of the graph
ShortestPath(Graph& graph): graph(&graph) {};

通过指针传递图形并存储指针

ShortestPath(Graph* graph): graph(graph) {};
由于

您的graph是指向Graph的指针,因此您应该使用以下方式(作为另一个答案):

ShortestPath(Graph& graph): graph(&graph) {};
                                  ^ // Get the pointer to object

 

但是,如果您确定传递graph的生存期大于并且等于ShortestPath对象的生存期。您可以使用引用代替指针:

class ShortestPath{
    public:
        ShortestPath(Graph& graph): graph(graph){};
    private:
        Graph &graph; 
              ^ // A reference to object
};

你需要获取 Graph 对象的地址,如下所示:

class ShortestPath{
    public:
        ShortestPath(Graph& graph): graph(&graph){}
    private:
        Graph *graph; 
};