传递一个类作为参数,但仍然使用点运算符?

时间:2014-07-03 15:45:37

标签: c++

这个问题有很多相当复杂的背景,需要很长时间来解释......所以我大大简化并省略了很多细节......

基本上我有一个函数,我有一个类的实例。 Class类型是Mat,实例是“Fred”。因此,我可以使用点(。)运算符(即Fred.data)访问Fred类中的数据。我现在想要调用第二个函数,我希望对Fred进行一些处理。如果我将指针传递给Fred,则第二个函数必须使用箭头操作符( - >)访问其数据。

我想知道的是,我是否可以以不同的方式传递Fred,以便function2中的代码可以使用Jim.data访问数据?

void function1()
{
  // some code here involving Fred

  int x = Fred.data;

  function2(&Fred)
}
void function2(Mat *Jim)
{ 
  int y = Jim->data;
}

3 个答案:

答案 0 :(得分:4)

通过引用传递

void function2(Mat& Jim)

即使直接访问数据成员有点代码味道。

答案 1 :(得分:2)

通过引用而不是指针传递:

void function1()
{
    // some code here involving Fred

    int x = Fred.data;

    function2(Fred)
}

void function2(Mat &Jim)
{
    int y = Jim.data;
}

Reference本质上是一个指向最多一个对象的常量指针,而指针可用于遍历对象数组。

如果你所做的只是调用方法和访问字段,那么简单地将*更改为&->.就足够了。请注意,虽然对象可能会超载->操作,如果您忘记替换->的所有出现,可能会导致一些麻烦。

答案 2 :(得分:0)

void function1()
{
  // some code here involving Fred

  int x = Fred.data;

  function2(Fred)
}
void function2(Mat& Jim)
{ 
  int y = Jim.data;
}