【问题标题】:is there an equivalent to 'classname.this' from java in c++?在 c++ 中是否有与 java 中的“classname.this”等价的东西?
【发布时间】:2017-07-27 06:45:35
【问题描述】:

我正在尝试从虚拟函数调用私有派生类方法,但我不知道如何从虚拟函数调用派生类的函数。

这是Game.h中Game类中的虚函数声明

virtual void Screen::KeyListener::onChar(char c);

当我在不同的 .cpp 文件中定义此函数时,我无法弄清楚如何访问 Game 类中声明的任何方法。我只能从 Screen 类中调用函数。

我试过这样的东西

Game::makeMove(1);

(其中make move是Game类中定义的私有成员函数)

但这只是给我一个错误“非静态成员引用必须相对于特定对象。”

对不起,如果我的措辞/术语有点不对劲,我对 c++ 还是很陌生。我的大部分经验是使用java。

【问题讨论】:

  • 讲课,而不是讲文件。只需一个文件即可制作 MCVE。

标签: java c++ function virtual member


【解决方案1】:

您确定定义实际上是在 Game 类中而不是在 Screen 类中定义函数 onChar 吗?如果你不小心把它写成了 onChar 的定义(我可以想象这很容易发生):

void Screen::KeyListener::onChar(char c) {}

那么你在类 Screen 中定义函数。

【讨论】:

    【解决方案2】:

    你可以像下面的代码一样使用静态:

    静态成员函数

    这些功能适用于整个班级,而不是 类的特定对象。

    可以使用对象和直接成员访问来调用它。 操作员。但是,更典型的是调用静态成员函数 本身,使用类名和范围解析 :: 运算符。

    例子:

    class X
    {
     public:
     static void f(){};
    };
    
    int main()
    {
     X::f();   // calling member function directly with class name
    }
    

    这些函数不能访问普通数据成员和成员函数,只能访问静态数据成员和静态成员函数。

    它没有任何“this”关键字,这是它无法访问普通成员的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2011-09-25
      • 2015-08-04
      • 2023-03-07
      • 2018-05-26
      • 2014-10-14
      • 2012-12-30
      相关资源
      最近更新 更多