0

我目前正在学习虚函数,在这个特定的课程中,它创建了一个对象指针数组firstArray[5],并从这些对象调用函数。直到现在,每当我想func()从一个对象调用一个函数时foo,我都会写foo.func(). 现在我正在使用虚函数和这个数组,本书已经切换到这个方法:firstArray[0]->func(). 这本书没有很好地证明这种转变的合理性,有人可以解释一下吗?我看到当我尝试使用时firstArray[0].func(),我得到了这个....

error: request for member 'func' in 'firstArray[0]', which is of non-class type 'sampleClass*'.

仅仅是因为我试图从指针而不是实际对象调用函数吗?我已经学习 C++ 几个月了,无论出于何种原因,有时指针仍然让我感到困惑。任何澄清都会有所帮助。

编辑:

我认为让我混淆的部分是:我可以使用base *ptr;. 然后,我可以通过说从派生类创建一个新对象来设置该指针ptr = new derived;。这就是我感到困惑的地方。如果我要创建一个int* ptr;,并且我希望它指向一个我创建的整数,我不能说ptr = int j. 如果ptr真的只是一个地址,为什么这两个示例的工作方式不同?我想我也不太了解“新”机制。

4

1 回答 1

5

这与虚函数没有任何关系。如果你有一个指针,你需要 operator-> 来尊重和访问它指向的对象......

您仍然可以使用运算符。(点)如果您首先取消引用,则访问成员/函数:

(*foo).func()

指向对象的指针仅保存对象在内存中的地址。
因此,如果您有一个指向某种类型的指针的变量,它实际上包含一个数字。

如果要使用该对象,则需要调用它所指向的对象,正如我所说的使用运算符*或运算符。(点)。

于 2013-02-05T16:01:34.967 回答