此示例中使用取消引用运算符 (c++)
Use of dereference operator in this example (c++)
我不明白为什么在这个例子中,我不能通过取消引用对象来访问成员函数
这是代码的相关部分
class Search
{
public:
void run();
private:
Result* result;
Result* extractResults()
};
extractResults() 定义如下
Result* Search::extractResults()
{
Result* ris;
//as soon as i know the size, i initialize ris
ris = new Result[numOfResults];
return ris;
}
在 run() 函数中,我调用 extractResults 来获取指向内部 ris 对象的指针
result = extractResults();
现在,我希望能够在run()中访问"result"对象,如下所示:
result[4]->doSomething();
但是它不起作用,我必须使用
result[4].doSomething();
为什么?
编辑
好的,我修改了代码以便能够使用取消引用运算符。我知道在这种情况下没有必要使用指针,我只是将其用作练习。
class Search
{
public:
void run();
private:
Result** resultPP;
Result* resultP;
Result* extractResults()
};
Result* Search::extractResults()
{
Risultato* ris;
//as soon as i know the size, i initialize ris
ris = new Risultato[numOfResults];
return ris;
}
在 run() 函数内部
resultP = extractResults();
resultPP = &resultP;
现在我终于可以做到了:
resultPP->doSomething();
我知道这很混乱,我只是想这样做,作为一种学习方式。谢谢!
result
是指向Risultato
数组的指针。因此,result
中的对象实际上是值类型。如果您确实想使用取消引用运算符,则必须将result
声明为指向Resultato
的指针数组的指针。我希望这有所帮助。
相关文章:
- 取消引用运算符不能重载
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 标准库类型的赋值运算符的引用限定符
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- C++编程:运算符重载中的引用如何工作?
- 重载运算符*以获取对另一个类的实例的引用
- 使用 scope 运算符 (::) 引用另一个文件中的类
- 对运算符=使用通用引用,而不是多个重载
- 如何重载下标运算符 [] 以引用 2d STL 数组?
- 未定义的引用和运算符 << vs me
- 为什么我不能在运算符=中使用引用类型?
- C++:对函子重载调用运算符的未定义引用
- 运算符重载C++类中的引用返回
- 如何在C++中使用 new 运算符创建对动态创建的数组的引用?
- 对模板运算符的未定义引用,其定义位于同一头文件中
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 如果可能的话,C++总是更喜欢右值引用转换运算符而不是常量左值引用吗?
- 运算符++:引用与值返回和未使用的参数