C++ 使用“调用函数”-&燃气轮机&引用;

C++ 使用“调用函数”-&燃气轮机&引用;,c++,pointers,C++,Pointers,我目前正在学习虚拟函数,在这节课中,它创建了一个对象指针数组firstArray[5],并从这些对象调用函数。直到现在,每当我想从对象foo调用函数func(),我都会编写foo.func()。现在我正在使用虚拟函数和这个数组,这本书已经切换到这个方法:firstArray[0]->func()。这本书并不能很好地解释这一转变,有人能解释一下吗?我看到,当我尝试使用firstArray[0].func()时,我得到了 错误:请求“firstArray[0]”中的成员“func”,该成员属于非类类

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

错误:请求“firstArray[0]”中的成员“func”,该成员属于非类类型“sampleClass*”

这仅仅是因为我试图从指针而不是实际对象调用函数吗?我已经学习C++几个月了,不管什么原因,指针有时会让我感到不安。任何澄清都会有所帮助

编辑:


我想让我搞混的部分是:我可以用
base*ptr创建一个指向基本对象类的指针。然后,我可以通过从派生类创建一个新对象来设置指针,方法是说
ptr=new-derived。这就是我感到困惑的地方。如果我要创建一个
int*ptr,我希望它指向我创建的一个整数,我不能说
ptr=intj
。如果
ptr
实际上只是一个地址,为什么这两个示例的工作方式不同?我想我也不太理解“新”机制。

这与虚拟函数无关。如果你有一个指针,你需要操作符->来访问它所指向的对象

你仍然可以使用接线员。(dot)要在先解除引用时访问成员/函数,请执行以下操作:

(*foo).func()
指向对象的指针只保留对象在内存中的地址。
所以如果你有一个变量,它是指向某个类型的指针,它实际上包含一个数字


如果你想使用这个对象,你需要调用它所指向的对象,就像我说的,使用操作符*或操作符。(点)。

这与虚拟函数无关。如果你有一个指针,你需要操作符->来访问它所指向的对象

你仍然可以使用接线员。(dot)要在先解除引用时访问成员/函数,请执行以下操作:

(*foo).func()
指向对象的指针只保留对象在内存中的地址。
所以如果你有一个变量,它是指向某个类型的指针,它实际上包含一个数字


如果你想使用这个对象,你需要调用它所指向的对象,就像我说的,使用操作符*或操作符。(点)。

你说得对。这是因为您正在从指针调用函数。使用“foo->func()”是“(*foo)的缩写。func()”是指针数组吗?必须使用(*var).func()或var->func()调用指针变量上的函数。也许你应该再读一次关于指针的章节,或者如果你还没有读,现在就读。:)谢谢你的意见。我不知道为什么特别是指针会让我陷入困境,我真的没有在其他章节中挣扎过。知道“foo->func()”是“(*foo).func()”的缩写现在很有意义。你是对的。这是因为您正在从指针调用函数。使用“foo->func()”是“(*foo)的缩写。func()”是指针数组吗?必须使用(*var).func()或var->func()调用指针变量上的函数。也许你应该再读一次关于指针的章节,或者如果你还没有读,现在就读。:)谢谢你的意见。我不知道为什么特别是指针会让我陷入困境,我真的没有在其他章节中挣扎过。知道“foo->func()”是“(*foo).func()”的缩写现在很有意义。我现在意识到它与虚拟函数没有任何关系,这就是为什么这本书在大约11章之后第一次以这种方式调用函数时我如此困惑的原因。我以为他们是有关系的,但显然不是。非常感谢。我现在意识到它与虚拟函数没有任何关系,这就是为什么当这是这本书在大约11章之后第一次以这种方式调用函数时我如此困惑的原因。我以为他们是有关系的,但显然不是。非常感谢。