将类作为参数传递,但仍使用点运算符
Passing a class as an argument, but still use the dot operator?
这个问题有很多相当复杂的背景,需要很长时间才能解释清楚。所以我在大幅简化,省略了很多细节……
本质上,我有一个函数,其中有一个类的实例。类类型是Mat,实例是"Fred"。因此,我可以使用点(.)操作符访问Fred类中的数据,即Fred.data。现在我想调用第二个函数,我希望在这个函数中对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;
}
通过引用传递
void function2(Mat& Jim)
尽管直接访问数据成员有点代码味
通过引用而不是指针传递:
void function1()
{
// some code here involving Fred
int x = Fred.data;
function2(Fred)
}
void function2(Mat &Jim)
{
int y = Jim.data;
}
Reference本质上是一个最多指向一个对象的常量指针,而指针可以用来遍历对象数组。
如果您所做的只是调用方法和访问字段,那么简单地将*
更改为&
,将->
更改为.
就足够了。但是要注意,对象可能会重载->
操作,如果忘记替换所有出现的->
,可能会导致一些麻烦。
void function1()
{
// some code here involving Fred
int x = Fred.data;
function2(Fred)
}
void function2(Mat& Jim)
{
int y = Jim.data;
}
相关文章:
- 使用双精度的浮点运算
- 将异常字符串解析为向量上的浮点运算?
- -O1改变浮点运算
- 将浮点运算与 Z3 C++ API 结合使用
- 序列点和运算符优先级有什么区别
- C++模运算符,使用 #define 和自己的类进行浮点运算
- 浮点运算
- 矩阵运算C++运算符重载程序错误
- 浮点运算的精度
- 为什么GDB对浮点运算的评估与C++不同
- C中的浮点运算出错
- 在Visual C++中,浮点运算优化会导致罕见而奇怪的行为
- 在 C++ 中设计点积运算符
- 为什么十进制浮点运算的提议没有被 C++0x 接受?
- 序列点与运算符优先级
- 为什么这个浮点运算被编译得如此奇怪(没有经过优化)
- 浮点运算结果的重现性
- 在浮点运算上执行平方运算和平方根运算时:表达式必须具有整型或非整型枚举类型
- C++:浮点运算的稳定性策略
- 自动获取某些代码段的浮点运算计数的方法