繁体   English   中英

为什么在某些情况下我可以在没有 object 的情况下调用成员 function?

[英]Why in some cases can I call a member function without an object?

我正在使用数值库 deal.ii,其中集成了许多数值工具。 我发现奇怪的是我可以直接调用成员函数而无需定义 object。 例如,我可以直接调用

Vectortools::interpolate_boundary_condition();

你能告诉我什么时候可以直接调用成员函数而不定义 object 吗? 谢谢!

有两种情况可以这样做:

  1. 成员 function 被声明为static - 在这种情况下,它基本上是一个免费的 function,但范围仅限于 ZABBC42F2A298EBC40。 值得注意的是, this不能在 static function 中使用,因为 object 不需要调用它。

  2. 当您在成员 function 中时,其this指针可隐式转换为指向正在调用的类型的指针(在本例中为Vectortools )。 请注意,这在 object 上调用的(隐含*this )。 这可用于调用被覆盖或隐藏的继承成员:

     class A { public: virtual void foo(); }; class B: public A { public: virtual void foo() override; }; void B::foo() { // Do something // Invoke the method we've overidden from A. A::foo(); // Then do something else }

这是因为您调用的 function 是 static function。 A static function is a function which can be called without make an object of the class. 您只能使用 static 函数访问 class 的 static 数据成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM