C ++:为什么可以在没有类实例的情况下调用非静态类方法?

时间:2019-07-04 23:43:40

标签: c++

自从我编写任何C ++以来已经有一段时间了,所以当查找一些基本示例以使我入门时,我很惊讶地看到这样的东西:

#include <iostream>

class TestClass {
public:
    void testMethod(){
        std::cout << "Hello!";
    }    
};

int main()
{
  TestClass test;     // Not being instantiated
  test.testMethod();  // Method still able to be called successfully!
}

如何在不首先创建类实例的情况下调用类的非静态方法?

工作示例:http://cpp.sh/3wdhg

2 个答案:

答案 0 :(得分:2)

TestClass test;是用于声明类型TestClass的变量的语法。变量是类型的实例。在这种情况下,它是TestClass的实例。

  

为什么非静态类方法可以调用...

因为您创建了一个实例。

  

...没有先创建类的实例?

您的前提是错误的。

答案 1 :(得分:1)

问题是,实际上正在被实例化。 testTestClass的实例。因此,test.testMethod()在类的实例上调用非静态方法。