c++ - 使用 "->"调用函数

标签 c++ pointers

我目前正在学习虚函数,在这个特定的类(class)中,它创建了一个对象指针数组 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 = int j。如果 ptr 真的只是一个地址,为什么这两个示例的工作方式不同?我想我也不太了解"new"机制。

最佳答案

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

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

(*foo).func()

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

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

关于c++ - 使用 "->"调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711565/

相关文章:

c++ - 链表 : Segmentation fault

c# - 在 C# 中传递和存储指向不可变类型和字符串的指针

c++ - 如何转换指针以调用派生类函数/方法? C++

c++ - xcode 4.2 Apple LLVM 编译器 3.0 是否与 c++ 异常完全兼容?

c++ - pimpl设计模式,成员函数需要放在私有(private)类中

C 为什么函数指针作为参数而不只是一个函数?

c - 鉴于字节内存地址不是 int 类型,int 类型的 C 指针如何保存内存地址?

c++ - Qt : How to get all the classes that are children of a specific class

c++ - 模板特化和完美转发

c++ - 用于快速搜索的二进制数据结构