在c ++中有没有相当于'classname.this'的java?

时间:2017-03-07 06:43:58

标签: java c++ function virtual member

我试图从虚函数调用私有派生类方法,但我无法弄清楚如何从虚函数调用派生类的函数。

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

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

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

我尝试过像这样的东西

Game::makeMove(1);

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

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

抱歉,如果我的措辞/术语稍微偏离,我仍然是c ++的新手。我的大多数经验都是用java。

2 个答案:

答案 0 :(得分:0)

你可以使用静态代码如下代码:

  

静态成员函数

     

这些函数适用于整个类而不是a   一个特殊的对象。

     

可以使用对象和直接成员访问来调用它。   运营商。但是,通过调用静态成员函数更为典型   本身,使用类名和范围resolution :: operator。

示例:

class X
{
 public:
 static void f(){};
};

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

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

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

答案 1 :(得分:0)

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

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

然后你在类Screen中定义函数。